美文网首页C++ 杂记
C++ 子类函数对父类同名函数的覆盖

C++ 子类函数对父类同名函数的覆盖

作者: 赵者也 | 来源:发表于2017-01-15 14:07 被阅读121次

注意:本文中代码均使用 Qt 开发编译环境
请查看下面的代码,并回答注释中的问题

#include <QCoreApplication>
#include <QDebug>

class B
{
public:
    void f(int) const {
        qDebug() << "B.int" << endl;
    }

    void f(double) const {
        qDebug() << "B.double" << endl;
    }
};

class D: public B
{
public:
    void f(void*) const {
        qDebug() << "D.void" << endl;
    }
};

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

    D d;
    d.f(0);     //1.调用那个函数?
    d.f(1);     //2.调用那个函数?
    d.f(0.1);   //3.调用那个函数?

    return a.exec();
}

答案:3个调用全部调用子类的f(void*)。但由于后两个不能转换为void*,编译出错。void*是可以指向
任何类型的指针。C++中,只有int 0可以转换为指针型,其余均不可以,所以出错。

关于子类函数对父类函数的覆盖:
在C++类里面,存在两个概念,一个是重载,一个是覆盖
重载只是在类的内部存在,不会传导到父类和子类中间。即便是一个函数声明virtual,也是这样。
如果一个类,存在和父类相同的函数,那么,这个类将会覆盖父类方法,除非你在调用的时候,强制转换父类类型,否则试图对子类和父类做类似重载的调用是不能成功的。

相关文章

  • c++温故知新2(虚函数表)

    c++多态由虚函数实现:子类覆盖父类的虚函数,然后声明一个指向子类对象的父类指针p,当用p调用虚函数时,调用的是子...

  • C++ 子类函数对父类同名函数的覆盖

    注意:本文中代码均使用 Qt 开发编译环境请查看下面的代码,并回答注释中的问题 答案:3个调用全部调用子类的f(v...

  • 子父类(要点补充)

    子父类中的函数当子类出现父类一模一样的函数时,子类对象调用该函数,会运行子类函数的内容。如同父类的函数被覆盖一样。...

  • 重写(overwrite)、重载(overload)和覆盖(ov

    覆盖(override):子类继承了父类的同名无参函数。当子类从父类继承了一个无参函数,而又定义了一个同样的无参函...

  • c++函数的override overwrite overloa

    override (overwrite) 重写(=覆盖): 父子类间,子类覆盖父类的方法,函数名参数均相同,父类函...

  • C++继承,多态,模版函数

    继承 代码的重用性父类构造函数先调用,子类的析构函数先调用父类和子类有重名的函数,是覆盖,并非多态 继承的访问修饰...

  • 2019-07-13 多态

    多态 字面意思是多种状态。在多态里涉及两个定义。 覆盖:即子类继承父类的同时重写了父类的函数,从而使父类中的同名函...

  • 父类的析构函数为虚函数

    当父类指针指向子类对象的时候,delete父类的指针,如果父类的析构函数不为虚函数,则调用父类的析构函数,子类的对...

  • C++虚函数

    1. 简单介绍 C++虚函数是定义在基类中的函数,子类必须对其进行覆盖。在类中声明(无函数体的形式叫做声明)虚函数...

  • Java中关键字super的作用

    点个关注不迷路~~ 调用超类(父类)的变量和函数 父类中的函数或者成员变量倘若被子类的函数或者成员变量覆盖,这种情...

网友评论

    本文标题:C++ 子类函数对父类同名函数的覆盖

    本文链接:https://www.haomeiwen.com/subject/qhwybttx.html