5-26 Cpp学习笔记

1、如果子类实现了基类的函数,返回值、参数都相同,就覆盖了基类的函数。

2、使用作用域解析运算符来调用基类的函数。myDinner.Swim(); —— 调用子类的。myDinner.Fish::Swim(); —— 调用基类的(基类是Fish)

3、在子类中使用关键字using解除对Fish::Swim()的隐藏。

public:
    using Fish::Swim; // unhide all Swim() methods in class Fish

4、父类优于子类对象之前被实例化。成员变量优于构造函数之前被实例化。

递归到父类,每个类先实例化成员,再调用构造。但是一定是先找到父类,再进行上述过程。

5、私有继承:base类的public、protected,只能被Derived类使用,而无法通过Derived实例来使用。私有继承是:has a,不再是is a。(考虑将继承关系变成组合)

保护继承:也是has a。Derived类可以访问基类的public、protected。继承层次结构外,也不能通过子类实例访问基类的成员。限制在类内实现而不是授权给实例。在继承层次结构中,子类的子类能访问Base类的public、protected。

无论什么继承,子类都不能访问父类的私有成员。

6、避免切除问题(类的截断),不要按值传递参数,以指向基类的指针或者const引用的方式

void UseBase(Base input);
...
Derived obj;
UseBase(obj); // 产生截断

7、多重继承,不同类之间用“,”隔开

class Platypus: public Mammal, public Bird, public Reptile {
    ...
};

8、final —— 不能用做基类,禁止被继承。

class CannotBeBass final {
    ...
};
class Platypus final: public Mammal, public Bird, public Reptile {
    ...
};

 作用于成员函数,禁止多态。

9、提问:通过使用using语句,子类能不能访问父类的private?

—— 《21天学通C++》

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值