多态性:如何访问派生类成员函数
Polymorphism: How do you access derived class member functions?
假设我们有一个来自抽象基类的派生类。指向抽象基类的指针在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;
}
相关文章:
- 为什么使用 "this" 指针调用派生成员函数?
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 如何使用基类指针引用派生类成员
- 派生类是否可以在抽象工厂设计模式中具有数据成员
- 在 C++ 中用派生类型重写成员函数
- 如果基类包含双指针成员,则派生类的构造函数
- 在派生类中绑定非静态模板化成员函数
- 为什么基指针可以访问虚拟函数中的派生成员变量
- 在销毁派生成员之前,在破坏者中调用共同功能
- 带有派生成员的基类的独特指针
- 为什么基类对象的私有成员仍然从派生成员中分配
- 派生成员函数指针的多态性
- 派生成员和重载Ostream运算符
- 通过指向派生类的指针访问派生成员变量
- 在构造过程中是否有一种简洁的方法可以派生成员的类型?
- 如何使用派生类特定的方法:派生类中的派生成员
- 获取从基类指针到具有不同类型的两个派生成员变量的访问权
- 当我使用根据基类定义的成员函数指针时,编译器如何调用派生成员函数?
- 将luabind派生成员调用为协同程序
- C++ POD 结构继承?是否有任何关于派生成员的内存布局的保证