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
 
