C++ Primer Plus 第十四章笔记

1.      建立has-a关系:

1)组合(包含),即创建一个包含其他类对象的类。

注意:使用公有继承时,类可以继承接口和实现;使用组合,类可以获得实现但不能获得接口,接口虽然不是共有的,但可以在类方法中使用它。

2)私有继承。使用私有继承,基类的公有成员和保护成员都将成为派生类的私有成员,这意味着基类方法将不会成为派生对象公有接口的一部分,但可以在派生类的成员函数中使用它们。使用私有继承时,只能在派生类的方法中使用基类的方法。私有继承通过强制类型转换使用基类对象本身。

3)保护继承,此时基类的公有成员和保护成员都将成为派生类的保护成员。

总结:应使用包含来建立has-a关系,如果新类需要访问原有类的保护成员,或需要重新定义虚函数,则应使用私有继承。

2.      包含将对象作为一个命名的成员对象添加到类中,而私有继承讲对象作为一个未被命名的继承对象添加到类中;包含使用成员名标识构造函数;私有继承使用类名标识构造函数;使用包含时使用对象名调用方法;使用私有继承时将使用类名和作用域解析运算符调用方法。

3.      在私有继承中,未进行显示类型转换的派生类引用或指针,无法赋值给基类的引用或指针。

4.      虚基类使得从多个类(它们的基类相同)派生出的对象只继承一个基类对象。

5.      C++在基类是虚的时候,禁止信息通过中间类自动传递给基类,需要显式地调用所需的基类构造函数。对于虚基类必须这样做,但对于非虚基类则是非法的。

6.      不能将模板成员函数放在独立的实现文件中。

7.      类模板可以为类型参数提供默认值。

8.      模板的具体化:

(1)      隐式实例化:它们声明一个或多个对象,指出所需类型,而编译器使用通用模板提供的处方生成具体的类定义,编译器在需要对象之前,不会生成类的隐式实例化。

(2)      显示实例化:使用关键字template并指出所需类型来声明类,编译器将生成类的显示实例化。

(3)      显式具体化:格式:template<> class Classname<specialized-type-name> {…}

(4)      部分具体化

9.      模板的友元:

(1)      非模板友元:将成为模板所有实例化的友元,它使用一个模板做参数,意味着必须要为使用的友元定义显示实例化。

(2)      约束模板友元:需要在类定义的前面声明每个模板函数,然后在函数中再次将模板声明为友元,第三需要为友元提供模板定义。

(3)      非约束模板友元函数:通过在类内声明模板来创建。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值