多态性:如何访问派生类成员函数

Polymorphism: How do you access derived class member functions?

本文关键字:派生 成员 函数 访问 何访问 多态性      更新时间:2023-10-16

假设我们有一个来自抽象基类的派生类。指向抽象基类的指针在main中声明,并通过"new"分配给派生类。如何从指向基类的指针(而不是从派生类的对象)访问派生类的成员函数?

示例:

#include <iostream>
using namespace std;
class clsStudent
{
public:
   virtual void display() = 0;// {cout<<"Studentn";}
};
class clsInternational : public clsStudent
{
public:
   void display(){cout<<"Internationaln";} 
   void passportNo(){cout<<"Passn";}
};
class local : public clsStudent
{
public:
   void display(){cout<<"Internationaln";}
   void icNo(){cout<<"ICn";}
};

int main()
{
   clsStudent * s = new clsInternational;
   clsStudent * s2 = new local;
   s->display(); 
   s->passportNo();  //This won't work
   return 0;
}

厚颜无耻的回答:不要。我的意思是,如果你真的需要,你的技术问题的答案是C++中的dynamic_cast操作,以便进行"向下转换"(从基类转换到派生类)。

但退一步说,这是一个合理的虚拟函数用例。问问自己,我想要理解的共同含义是什么?

在这种情况下,我们希望所有学生都有一个识别号。

工作源代码:http://ideone.com/5E9d5I

class clsStudent
{
public:
   virtual void display() = 0;// {cout<<"Studentn";}
   virtual void identifyingNumber() = 0;
};
class clsInternational : public clsStudent
{
public:
   void display(){cout<<"Internationaln";} 
   void identifyingNumber(){cout<<"Passn";}
};
class local : public clsStudent
{
public:
   void display(){cout<<"Localn";}
   void identifyingNumber(){cout<<"ICn";}
};

int main()
{
   clsStudent * s = new clsInternational;
   clsStudent * s2 = new local;
   s->display(); 
   s->identifyingNumber();  
   s2->display(); 
   s2->identifyingNumber();  
   return 0;
}