• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C++派生类覆盖重载基类函数

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

派生类希望基类重载函数可见,情况有三种:

    a)派生类中覆盖某个版本,则某个版本可见,全部都覆盖重写,则全部版本可见。

    b)派生类中一个也不覆盖,则全部基类版本可见。

    c)派生类需要添加新的重载版本,同时又需要可见基类的重载版本,此时并不是必须全部覆盖重写全部版本。可在派生类中用using声明基类重载的函数。

      说明:对派生类没有重新定义的重载版本的访问实际上是对using声明点的访问。

 

两种注意点:

    a)指向派生类的基类指针或引用,不可调用派生类中的重载函数。

      原因:静态编译名字查找先于类型检查,在基类中找到同名函数,就不喊在派生类中继续找,而基类不存在目标调用形式的函数

    b)若不用using声明基类的重载版函数,派生类对象不可调用基类的重载版本。

      原因:派生类的函数,隐藏了基类的同名函数。

h----------------------
#ifndef DEMOCLASS_H
#define DEMOCLASS_H

#include <iostream>
using namespace std;

class DemoClass
{
public:
    DemoClass();
    void func(int);
    void func(char);
};

class DerivedClass:public DemoClass
{
 public:
     using DemoClass::func;
     void func(string);
};


#endif // DEMOCLASS_H


cpp---------------------------
#include "democlass.h"

DemoClass::DemoClass()
{
    cout<<"construct..."<<endl;
}

void DemoClass::func(int)
{
    cout<<"DemoClass func(int)..."<<endl;
}

void DemoClass::func(char)
{
    cout<<"DemoClass func(char)..."<<endl;
}

void DerivedClass::func(string)
{
    cout<<"DerivedClass func(string)..."<<endl;
}


main----------------------
#include <QCoreApplication>
#include "democlass.h"

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    DemoClass *demo;
    DerivedClass derived;
    demo = &derived;

    cout<<"...Demo object that point to Derived access func..."<<endl;
    demo->func(1);
    demo->func('a');

    cout<<endl<<"...derived object access func..."<<endl;
    derived.func(1);
    derived.func('a');
    derived.func("abc");
    return a.exec();
}



运行结果--------------------
construct...
...Demo object that point to Derived access func...
DemoClass func(int)...
DemoClass func(char)...

...derived object access func...
DemoClass func(int)...
DemoClass func(char)...
DerivedClass func(string)...

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap