Перейти к содержанию
Опубликовано
comment_345
В данной статье я расскажу про

виртуальные методы.

 

Виртуальный метод даёт возможность переопределения

метода в производном классе.

 

Представим ситуацию:

У нас есть класс CAdmins имеющий метод

GetNickName() , а также производный класс CP45H3 в котором нам

нужно переопределить метод GetNickName().

Если мы опишем такой код:



class CAdmins {
public:
void GetNickName() {printf("Base class\n");}
};
class CP45H3 : public CUsers{
public:
void GetNickName() {printf("P45H3\n");}
};


То компилятор скажет нам: "Это всё хуйня, переделывай".

 

В реализации задуманного нам помогут виртуальные методы.

Сделав метод в базовом классе виртуальным, мы сможем переопределять его

в любом производном классе.

Пример реализации задуманного



#include <Windows.h>
#include <iostream>
 
class CAdmins { //Базовы класс
public:
CAdmins() {} //Конструктор
virtual void GetNickName() = 0; //Определение виртуального метода
virtual ~CAdmins() {}; //Определение виртуального деструктора
};
 
class CP45H3 : public CAdmins {//Производный класс
public:
CP45H3() {}
void GetNickName() override { printf_s("P45H3\n"); }//Переопределение виртуального метода
~CP45H3() {}
};
 
class CChester : public CAdmins {//Производный класс
public:
CChester() {}
void GetNickName() override { printf_s("MS_CHESTER\n"); }//Переопределение виртуального метода
~CChester() {}
};
 
int main() {
SetConsoleTitle(" ");
 
CAdmins * g_p45h3 = new CP45H3; //Инициализируем указатель на базовый класс производными
CAdmins * g_chester = new CChester;
 
g_p45h3->GetNickName(); //Вызов методов через указатель на базовый класс
g_chester->GetNickName();
 
delete g_p45h3;//Удаление объектов производных классов
delete g_chester;
return 0;
}


Вывод:


P45H3

MS_CHESTER


В данном коде имеется один базовый класс и два

производных, которые переопределяют метод GetNickName().

Деструктор чисто виртуального класса также должен быть

виртуальным для корректного удаления объектов производных классов.

 

Скачать проект вы можете на моём GitHub'e


With love by P45H3 =)

02a1fd3cc9ed.png

 

 

Рекомендуемые сообщения

Нет сообщений для отображения
Гость
Эта тема закрыта для публикации ответов.