函数重载,覆盖与隐藏

 函数重载:

1.  作用域相同(同一类中)

2.  参数不同(类型或者个数)

3.  函数名相同

4.  基类关键字Virtual关键字可有可无

 

函数覆盖:子类覆盖父类的同名函数(虚函数),同名+同参

1.  作用域不同(子类和父类)

2.  参数相同

3.  函数名相同

4.  基类中的函数必须有virtual关键字

 

以上部分摘自    C/C++高效编程》

 

class Animal

{

public:

       virtual void sleep() { cout << "Animal::sleep()" << endl;}

};

 

class Dog : public Animal

{

public:

       virtual void sleep() { cout << "Dog::sleep()" << endl;}              //函数重载

};

 

函数隐藏:子类与父类具有同名函数(不管参数是否相同)

注意与函数覆盖相区分:

1.  派生类的函数与基类函数完全相同(同名且参数相同),只是基类函数没有使用virtual关键字。此时,基类的函数将被隐藏,而不是覆盖。

2.  派生类的函数与基类只是同名(参数不同),这种情况下,无论基类函数是否使用virtual关键字,基类的函数都被隐藏。

 

class Animal

{

public:

       void sleep() { cout << "Animal::sleep()" << endl;}

       void eat(int a) { cout << "Animal::eat()" << endl;}     

};

 

class Dog : public Animal

{

public:

       void sleep() { cout << "Dog::sleep()" << endl;}   //与基类函数完全相同,函数隐藏

       void eat()       { cout << "Dog::eat()" << endl;}   //与基类函数同名但不同参,函数隐藏

};

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值