Предположим, что у нас есть производный класс из абстрактного базового класса. Указатель на абстрактный базовый класс объявляется в основном и выделяется производному классу через «новый». Как вы получаете доступ к функциям-членам производного класса от указателя на базовый класс (а не от объекта производного класса)?Полиморфизм: как вы получаете доступ к функциям члена производного класса?
Пример:
#include <iostream>
using namespace std;
class clsStudent
{
public:
virtual void display() = 0;// {cout<<"Student\n";}
};
class clsInternational : public clsStudent
{
public:
void display(){cout<<"International\n";}
void passportNo(){cout<<"Pass\n";}
};
class local : public clsStudent
{
public:
void display(){cout<<"International\n";}
void icNo(){cout<<"IC\n";}
};
int main()
{
clsStudent * s = new clsInternational;
clsStudent * s2 = new local;
s->display();
s->passportNo(); //This won't work
return 0;
}
Это противоречит всей идее полиморфизма. Если вы хотите получить доступ к функции производного класса, вам нужно будет указать свой указатель на производный тип. –
Функция 'passNo()' не определена ни в одном из классов 'clsInternational',' local' и 'clsStudent'. Это опечатка? Если да, то что это должно быть? – Oswald
@ Освальд. Простите, что это должно было быть s-> passportNo() – user3025784