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

你可能感兴趣的:(c/c++,读书笔记)