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程序的人看来!!但是,这确实是一个巨大的坑,在项目中十足被坑了一把!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值