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的主要内容,如果未能解决你的问题,请参考以下文章