Пусть дано определение.
1 2 3 4 5 6 7 8 |
class Base { public: virtual void iam() { cout <<"Base \n"; } }; |
Напишите два производных от Base класса и для каждого из них определите iam(), выводящую имя класса. Создайте объекты этих классов и вызовите iam для них. Присвойте значения указателей на эти объекты указателю типа Base* и вызовите с его помощью iam()
Это мы тут наверное смоделируем полиморфизм мне так чото кажется. Создадим два класса каких нибудь, переопределим функцию iam() в них. Я уже и забыл, что такое за виртуальная функция и чисто виртуальная функция и чем они отличаются. По ходу решения задач я думаю разберемся.
Вот код файл main.cpp:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
//pervoe ypr #include <iostream> using std::cout; using std::endl; class Base { public: virtual void iam() { cout <<"Base \n"; } }; class Base1 : public Base { public: void iam() { cout <<"Base1"<<endl; } }; class Base2 : public Base { public: void iam() { cout <<"Base2"<<endl; } }; int main() { Base1 a; a.iam(); Base2 b; b.iam(); Base* baza; Base1* a1=&a; Base2* b2=&b; cout <<"_________________________"<<endl; baza=a1; baza->iam(); baza=b2; baza->iam(); cout <<"**************************"<<endl; baza=&a; baza->iam(); baza=&b; baza->iam(); return 0; } |
Ну это иллюстрирует полиморфизм в С++. мы может указатель на производный класс присвоить базовому, но наоборот нельзя. Указатель базового класса присвоить указателю производного класса потому, что в базовом классе могут отсутствовать функции которые находятся в производном классе, так что так. Такие пироги ребята. Как мы видим нам не нужно переживать какая функция вызовется. Вызовется та функция которая принадлежит указателю на данный объект с него вызовется от так то.