MyTetra Share
Делитесь знаниями!
виртуальные таблицы (vtable), Абстактные ф-ции и классы, Интерфейс (класс-интерфейс, интерфейсный класс), Виртуальный базовый класс, Чисто виртуальный деструктор
Время создания: 13.06.2020 20:07
Раздел: C++ - Примеры кода - Работа на уроке
Запись: Shut913/Tetra-notes-Programming/master/base/1592068032bo34mhebrd/text.html на raw.githubusercontent.com

#include <iostream>


// == виртуальные таблицы (vtable)

// *__vptr

//class Parent

//{

//public:

// virtual void function1() {};

// virtual void function2() {};

//};

//

//class C1 : public Parent

//{

//public:

// virtual void function1() {};

//};

//

//class C2 : public Parent

//{

//public:

// virtual void function2() {};

//};

//

//int main()

//{

//

//}


// Абстактные ф-ции и классы

// -- Чистые виртуальные ф-ции (абстрактные ф-ции)

//

//class Parent // это уже абстрактный класс

//{

//public:

// const char* say() { return "Hey"; }

// virtual const char* getName() { return "Parent"; }

//

// virtual int getValue() = 0;

//};

//

//

//class Animal

//{

//protected:

// std::string _name;

//public:

// Animal(std::string name)

// : _name(name) {}

//

// std::string getName() { return _name; }

// virtual const char* speak() = 0;

//};

//

//// реализация по-умолчанию

//const char* Animal::speak()

//{

// return "Default speak";

//}

//

//class Cat : public Animal

//{

//public:

// Cat(std::string name)

// : Animal(name) {}

//

// virtual const char* speak() { return "Meow"; }

//};

//

//class Dog : public Animal

//{

//public:

// Dog(std::string name)

// : Animal(name) {}

//

// virtual const char* speak() { return "Woof"; }

//};

//

//class Lion: public Animal

//{

//public:

// Lion(std::string name) :

// Animal(name) {}

//

// virtual const char* speak() {

// //return "RRRR";

// return Animal::speak();

// }

//};

//

//int main()

//{

// Lion lion("Tom");

// Animal& pAnimal= lion;

//

// std::cout << pAnimal.speak();

//}


// Интерфейс (класс-интерфейс, интерфейсный класс)

// 1. не имеет переменных-членов

// 2. все методы - чистые виртуальные ф-ции

//class IErrorLogger

//{

//public:

// virtual bool openLog(const char* logName) = 0;

// virtual bool closeLog() = 0;

// virtual bool writeLog(const char* message) = 0;

//

// virtual ~IErrorLogger() {}

//};

//

//class FileErrorLogger: public IErrorLogger

//{

// virtual bool openLog(const char* logName) override

// {

// std::cout << "file opened";

// }

//

// virtual bool closeLog() override {}

// virtual bool writeLog(const char* message) override {}

//};

//

//class DBErrorLogger : public IErrorLogger

//{

// virtual bool openLog(const char* logName) override

// {

// std::cout << "DB opened";

// }

//

// virtual bool closeLog() override {}

// virtual bool writeLog(const char* message) override {}

//};

//

//

//double MySqrt(double value, IErrorLogger& log)

//{

// if (value < 0)

// {

// log.openLog("lkjsdlf");

// log.writeLog("message");

// log.closeLog();

// return 0;

// }

//

// return sqrt(value);

//}

//

//int main()

//{

// DBErrorLogger log;

//

// MySqrt(25, log);

//}


// Виртуальный базовый класс (решение проблемы алмаза смерти)

//class PoweredDevice

//{

//public:

// PoweredDevice(int power = 0)

// {

// std::cout << "PoweredDevice: " << power << '\n';

// }

//};

//

//class Scanner : virtual public PoweredDevice

//{

//public:

// Scanner(int scanner)

// {

// std::cout << "Scanner: " << scanner << '\n';

// }

//};

//

//class Printer : virtual public PoweredDevice

//{

//public:

// Printer(int printer)

// {

// std::cout << "Printer: " << printer << '\n';

// }

//};

//

//class Copier : public Scanner, public Printer

//{

//public:

// Copier(int scanner, int printer, int power):

// PoweredDevice(power),

// Scanner(scanner),

// Printer(printer)

// {

// std::cout << "Copier: " << '\n';

// }

//};

//

//int main()

//{

// Copier c(1, 2, 3);

//}


// Чисто виртуальный деструктор

//class A

//{

// virtual ~A() = 0;

//};

//

//A::~A()

//{

// std::cout << "abstract";

//}

//

//class B : public A

//{

//

//};

Так же в этом разделе:
 
MyTetra Share v.0.58
Яндекс индекс цитирования