c – 在子类中重载虚拟函数
发布时间:2020-12-16 07:53:24 所属栏目:百科 来源:网络整理
导读:我只是用c中的虚拟关键字和继承概念进行测试. 我写了一个小程序: #includestdio.h#includeiostreamusing namespace std;class cna_MO{ public: virtual void print() { cout "cna_MO" endl; }};class cna_bsc:public cna_MO{ public: void print() { cna_MO
我只是用c中的虚拟关键字和继承概念进行测试.
我写了一个小程序: #include<stdio.h> #include<iostream> using namespace std; class cna_MO { public: virtual void print() { cout << "cna_MO" << endl; } }; class cna_bsc:public cna_MO { public: void print() { cna_MO::print(); } void print(int a) { cout << "cna_BSC" << endl; } }; class cna_Mo { cna_MO *_mo; public: cna_Mo() { _mo = new cna_bsc; } virtual void print(int a) { cout << "cna_Mo with arg" << endl; _mo->print(5); } virtual void print() { cout << "cna_Mo" << endl; _mo->print(); } }; int main() { cna_Mo valid_mo; cout << "old case is started" << endl; valid_mo.print(); cout << "new case is started" << endl; valid_mo.print(5); return 0; } 我在这里做的是我已经重载了一个虚拟函数在父类中的子类!这不是正确的事吗? 我收到的编译错误如下:
解决方法
一旦从Derived类中的Base类重载了一个函数,Base类中所有具有相同名称的函数都将被隐藏在Derived类中.
一旦将函数cna_bsc :: print(int a)添加到派生类中,则派生类的用户不再可以看到函数cna_MO :::: print().这被称为功能隐藏. 解: using cna_MO::print; 在你的派生类cna_bsc的公共部分. 好阅读: What’s the meaning of,Warning: Derived::f(char) hides Base::f(double)? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 避免重复请求之后: $.ajax abort();
- tdd – 数据库集成测试
- flex Microphone.getEnhancedMicrophone() 找不到该函数的解
- plupload ie9 上传没大小 和 不支持 flash
- sqlite删除字段办法 near 'drop':syntax error;
- vb.net – 默认情况下如何将参数传递给VB函数
- c only:一元减去0x80000000
- c – 为什么[std :: unique]不能适用于[std :: multiset]?
- 【风宇冲】Unity3D教程宝典之两步实现超实用的XML存档
- cocos2d-iphone – cocos2d v2.0升级和RootViewController