C++中的override

Posted createchance

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++中的override相关的知识,希望对你有一定的参考价值。

C++中的override与java等其他的OOP语言有一些不一样,举个例子来说,比如你有下面这个代码:

/*************************************************************************
    > File Name: test.cpp
    > Author: Baniel Gao
    > Mail: createchance@163.com 
    > Created Time: Mon 22 Aug 2016 09:58:20 PM CST
 ************************************************************************/

#include <iostream>
using namespace std;

class A 
public:
    A():i(0) 
        cout << "A::A()" << endl;
    
    ~A() 
        cout << "A::~A()" << endl;
    
    void print() 
        cout << "class A i: " << i << endl;
    

    void print(int ii) 
        cout << "class A i: " << i << ", ii: " << ii << endl;
    

protected:
    int i;
;

class B : public A 
public:
    void print() 
        cout << "class B i: " << i << endl; 
    
;

int main()

    A a;
    B b;

    a.print();
    a.print(1);

    b.print();
    b.print(2);

    return 0;

如果你了解JAVA的话,很容易会觉得这个程序没有问题,但是编译的时候出现下面的错误:

这里我们g++给出的错误不是很友好,但是我们还是能够依稀明白些什么。它的意思是说,你要在第47行,也就是b.print(2);这行,要调用带有int参数的print函数,但是找不到!!有java的基础,这里总是感觉十分别扭!!在C++中的override,和java中是很不一样的,在C++中如果你定义个一个名称和父类相同的函数时,那么你就将父类的同名方法在此类中全部覆盖了!!即使返回值不一样也不行!!如果还是想要使用父类的带有int参数的print函数怎么办呢?有办法,可以这么调用:

b.A::print(2);

好吧,我承认这是一个很恶心人的语法,至少在一个写惯了java程序的人看来!!但是,这确实是一个巨大的坑,在项目中十足被坑了一把!!!

以上是关于C++中的override的主要内容,如果未能解决你的问题,请参考以下文章

Q_DECL_OVERRIDE

第四次作业

Qt Q_DECL_OVERRIDE

C++——多态

C++多态

什么时候调用override函数中的上层函数?在其他代码之前还是之后?