c++对父类中同名函数的隐藏规则

c++规则:

(1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏。
(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字。此时,基类的函数被隐藏。
这种隐藏规则,不仅仅是表现在对成员函数上,对同名的data member也是如此。

虽然B中的g函数与A中的g函数参数个数不同,但是仍然将A类中的g函数隐藏了。导致编译的时候报错,不存在g(float,float)函数

#include "iostream"

using namespace std;


class A{
    public:
    void f1(){
        std::cout << "A::f1" << std::endl;
    }

    virtual void g(float v,float c){
        std::cout <<"A::g" << std::endl;
    }
};

class B : public A{
    public: 
    void f1(){
        std::cout << "B::f1" << std::endl;
    }

    virtual void g(float v){
        std::cout <<"B::g" << std::endl;
    }
};

int main(){

    B *p = new B();

    p->g(92.0f,7.0f);
    p->f1();
    return 0;
}

编译报错:

$ g++ over.cpp -std=c++11
over.cpp: In function ‘int main()’:
over.cpp:32:20: error: no matching function for call to ‘B::g(float, float)’
     p->g(92.0f,7.0f);
                    ^
over.cpp:23:18: note: candidate: virtual void B::g(float)
     virtual void g(float v){
                  ^
over.cpp:23:18: note:   candidate expects 1 argument, 2 provided

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值