MyTetra Share
Делитесь знаниями!
Указатели, ссылки и наследование, Виртуальные ф-ции, модификаторы override, final, Ковариантный тип возврата, Виртуальный деструктор, Игнорирование виртуальных ф-ций, Раннее и позднее связывание, Виртуальные таблицы
Время создания: 13.06.2020 20:02
Раздел: C++ - Примеры кода - Работа на уроке
Запись: Shut913/Tetra-notes-Programming/master/base/1592067772bydkyqpngu/text.html на raw.githubusercontent.com

#include <iostream>


// == Указатели, ссылки и наследование

//class Parent

//{

//protected:

// int _value;

//

//public:

// Parent(int value)

// : _value(value) {}

//

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

// int getValue() { return _value; }

//};

//

//class Child : public Parent

//{

//public:

// Child(int value)

// : Parent(value) {}

//

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

// int getDoubled() { return _value * 2; }

//};

//

//int main()

//{

// Child child(7);

// std::cout << child.getName() << " " << child.getValue() << "\n";

//

// Child& rChild = child;

// std::cout << rChild.getName() << " " << rChild.getValue() << "\n";

//

// Child* pChild = &child;

// std::cout << pChild->getName() << " " << pChild->getValue() << "\n";

//

//

//

// Parent& rParent = child;

// Parent* pParent = &child;

//

// std::cout << child.getName() << " " << child.getValue() << "\n";

// std::cout << rParent.getName() << " " << rParent.getValue() << "\n";

// std::cout << pParent->getName() << " " << pParent->getValue() << "\n";

//

// return 0;

//}

//

//


//class Animal

//{

//protected:

// std::string _name;

//

// Animal(std::string name)

// : _name(name) {}

//

//public:

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

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

//};

//

//class Cat : public Animal

//{

//public:

// Cat(std::string name)

// : Animal(name) {}

//

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

//};

//

//class Dog : public Animal

//{

//public:

// Dog(std::string name)

// : Animal(name) {}

//

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

//};

////

////

////void printInfo(Cat& cat)

////{

//// std::cout << cat.getName();

////}

////

////void printInfo(Dog& dog)

////{

//// std::cout << dog.getName();

////}

////

//void printInfo(Animal& animal)

//{

// std::cout << animal.getName() << "\n";

//}

//

//

//int main()

//{

// Cat cat("Matroskin");

// std::cout << cat.getName() << " " << cat.speak() << '\n';

//

// Dog dog("Barsik");

// std::cout << dog.getName() << " " << dog.speak() << '\n';

//

//

// Animal* pAnimal = &cat;

// std::cout << pAnimal->getName() << " " << pAnimal->speak() << '\n';

//

// pAnimal = &dog;

// std::cout << pAnimal->getName() << " " << pAnimal->speak() << '\n';

//

// std::cout << "\n=======\n\n";

// printInfo(cat);

// printInfo(dog);

//

// return 0;

//}


// == Виртуальные ф-ции

//class Parent

//{

//public:

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

//};

//

//class Child : public Parent

//{

//public:

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

//};

//

//int main()

//{

// Child child;

// Parent& rParent = child;

//

// std::cout << rParent.getName() << "\n";

//

// return 0;

//}

//

//class A

//{

//public:

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

//};

//

//class B : public A

//{

//public:

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

//};

//

//class C : public B

//{

//public:

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

//};

//

//class D : public C

//{

//public:

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

//};

//

//int main()

//{

// C c;

//

// A& rParent = c;

//

// std::cout << rParent.getName() << '\n';

//

// return 0;

//}

//

//

//class Animal

//{

//protected:

// std::string _name;

//

// Animal(std::string name)

// : _name(name) {}

//

//public:

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

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

//};

//

//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"; }

//};

//

//int main()

//{

// Cat cat("Matroskin");

// std::cout << cat.getName() << " " << cat.speak() << '\n';

//

// Dog dog("Barsik");

// std::cout << dog.getName() << " " << dog.speak() << '\n';

//

//

// Animal* pAnimal = &cat;

// std::cout << pAnimal->getName() << " " << pAnimal->speak() << '\n';

//

// pAnimal = &dog;

// std::cout << pAnimal->getName() << " " << pAnimal->speak() << '\n';

//

// return 0;

//}


// == модификаторы override, final

// -- override

//class A

//{

//public:

// virtual const char* getName1(int x) { return "A"; }

// virtual const char* getName2(int x) { return "A"; }

// virtual const char* getName3(int x) { return "A"; }

//};

//

//class B : public A

//{

//public:

// virtual const char* getName1(short int x) override { return "B"; }

// virtual const char* getName2(int x) const override { return "B"; }

// virtual const char* getName3(int x) override { return "B"; }

//};

//

//int main()

//{

// B b;

// A& rParent = b;

//

// std::cout << rParent.getName1(2) << "\n";

// std::cout << rParent.getName2(3) << "\n";

//}

// -- final

//class A final

//{

//public:

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

//};

//

//class B : public A

//{

//public:

// virtual const char* getName() override final { return "B"; }

//};

//

//class C : public B

//{

//public:

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

//};


// Ковариантный тип возврата

//class Parent

//{

//public:

// virtual Parent* getThis()

// {

// std::cout << "called Parent::getThis()\n";

// return this;

// }

//

// void printType() { std::cout << "returned a Parent\n"; }

//};

//

//class Child : public Parent

//{

//public:

// virtual Child* getThis() override

// {

// std::cout << "called Child::getThis()\n";

// return this;

// }

// void printType() { std::cout << "returned a Child\n"; }

//};

//

//int main()

//{

// Child ch;

// Parent* p = &ch;

// ch.getThis()->printType(); // вызывается Child::getThis(), возвращается Child*, вызывается Child::printType

// p->getThis()->printType(); // вызывается Child::getThis(), возвращается Parent*, вызывается Parent::printType

//}


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

//class Parent

//{

//public:

// virtual ~Parent()

// {

// std::cout << "Calling ~Parent()" << std::endl;

// }

//};

//

//class Child : public Parent

//{

//private:

// int* _array;

//

//public:

// Child(int length)

// {

// _array = new int[length];

// }

//

// virtual ~Child() override

// {

// std::cout << "Calling ~Child()" << std::endl;

// delete[] _array;

// }

//};

//

//int main()

//{

// Child* pChild = new Child(7);

// Parent* pParent = pChild;

//

// delete pParent;

//

// return 0;

//}


// -- Игнорирование виртуальных ф-ций

//class Parent

//{

//public:

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

//};

//

//class Child : public Parent

//{

//public:

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

//};

//

//int main()

//{

// Child child;

// Parent& pParent = child;

//

// std::cout << pParent.Parent::getName();

//}


// == Раннее и позднее связывание


// -- Ранее связывание

//int add(int a, int b)

//{

// return a + b;

//}

//

//int subtract(int a, int b)

//{

// return a - b;

//}

//

//int multiply(int a, int b)

//{

// return a * b;

//}

//

//int main()

//{

// int a;

// std::cout << "Enter a number: ";

// std::cin >> a;

//

// int b;

// std::cout << "Enter another number: ";

// std::cin >> b;

//

// int operation;

// do

// {

// std::cout << "Enter an operationeration (0 = add, 1 = subtract, 2 = multiply): ";

// std::cin >> operation;

// } while (operation < 0 || operation > 2);

//

// int result = 0;

// switch (operation)

// {

// case 0: result = add(a, b); break;

// case 1: result = subtract(a, b); break;

// case 2: result = multiply(a, b); break;

// }

//

// std::cout << "The answer is: " << result << std::endl;

//

// return 0;

//}


// -- Позднее связывание

//int add(int a, int b)

//{

// return a + b;

//}

//

//int subtract(int a, int b)

//{

// return a - b;

//}

//

//int multiply(int a, int b)

//{

// return a * b;

//}

//

//int main()

//{

// int a;

// std::cout << "Enter a number: ";

// std::cin >> a;

//

// int b;

// std::cout << "Enter another number: ";

// std::cin >> b;

//

// int operation;

// do

// {

// std::cout << "Enter an operationeration (0 = add, 1 = subtract, 2 = multiply): ";

// std::cin >> operation;

// } while (operation < 0 || operation > 2);

//

// int (*pFunc)(int, int) = nullptr;

//

// switch (operation)

// {

// case 0: pFunc = add; break;

// case 1: pFunc = subtract; break;

// case 2: pFunc = multiply; break;

// }

//

// std::cout << "The answer is: " << pFunc(a, b) << std::endl;

//

// return 0;

//}


// == Виртуальные таблицы

//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() {};

//};

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