c – 多态性:如何访问派生类成员函数?
发布时间:2020-12-16 09:49:04 所属栏目:百科 来源:网络整理
导读:假设我们有一个来自抽象基类的派生类.指向抽象基类的指针在main中声明,并通过“new”分配给派生类.如何从指向基类的指针(而不是派生类的对象)访问派生类的成员函数? 例: #include iostreamusing namespace std;class clsStudent{public: virtual void disp
假设我们有一个来自抽象基类的派生类.指向抽象基类的指针在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; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |