《C++程序设计原理与实践》读书笔记

本文探讨了C++中抽象类及其纯虚函数的概念、作用及实现方式,并对比了继承与组合的不同之处。
p292 ,302
what 抽象类:只能用作其他类的基类。我们使用抽象类来表示那些抽象的概念,即相关实体共性的一般化所对应的那些概念
what 抽象类的另一种解释 《effective c++》电子版p175:另一个制作Handle class的办法是,令类成为一种特殊的抽象基类(abstract base class),称为Interface class。这种class的目的是详细一一描述子类的接口,所以它通常不带成员变量,也没有构造函数,只有一个virtual析构函数,以及一组纯虚函数,用来叙述整个接口。
 
why 抽象类
1)为了抽象,便于继承
2)为了定义一组相关类(类层次)的接口(p302)
how 抽象类:在c++中如何实现使类成为抽象类:
1)最常用:声明至少一个纯虚函数(virtual function。在子类中被覆盖虚函数
2)通过将构造函数声明为protected。“protected:”用于构造函数的目的是:保证我们不能直接创建该类。
//C++ 程序设计原理与实践》 p303
class  // 抽象类
{
public:
       virtual void f()=0;  //纯虚函数
       virtual void g()=0;
};

B b; //编译错误:因为 B是抽象类


p303
how设计纯虚函数:带有纯虚函数的类不需要构造函数(如果它没有任何数据成员):带有纯虚函数的类的目标是提供纯粹的接口,即它们倾向于不包含任何数据成员(数据成员在派生类中定义),因此没用任何构造函数(如果没有任何数据成员需要初始化,那么就不需要构造函数)

why 纯虚函数:
1)使其类成为抽象类
2)提供纯粹的接口

how:类的数据成员都要声明为private,不能声明为protected,类提供public接口来让子类和客户访问修改这些数据成员。子类也只能通过成员函数访问修改这些数据成员。how设计纯虚函数


why 继承,而不是组合:
减少代码量:父类public,子类设计,成员函数:相比于组合,不用再一个一个写public接口了。这只是父类设计,要考虑的问题。
父类protected开放权限给子类设计,却对客户封闭:1)相比于组合(public),不用再一个一个写为private了 2)组合,A类如果函数为public,尽管组合A类的B类将其函数封装为private,但客户也能使用A类的public函数了,
继承可以多态
可以多重继承


p298
how:基本上,类层次结合参数引用传递方式,与默认拷贝是不能混合的。当你设计一个将要作为基类的类时,应禁用它的拷贝构造函数和拷贝赋值操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值