C++程序设计教程--读书笔记 第十章 继承

第十章 
 
一、知识点
1、继承就是让子类继承父类的属性和操作,子类可以声明新的属性和操作,还可以剔除那些不适合其用途的父类操作。集成可以让你重用父类的代码,专注于为子类编写新代码。(P348)
 
2、如果类BaseClass 是基类:
class BaseClass{
     int a, b;
public:
};
则其对象本体含义两个整型空间。派生类继承的方式是在类定义的class类名的后面加上:“public”再加上基类名。如果B继承了BaseClass类,则:
class B : public BaseClass{
     int c;
public:
};
派生类对象本体包含两个部分,一个为基类部分,既包含两个整型空间,另一个为派生类部分,含有一个整型空间。派生类总是依附于基类,或者说,基类对象是派生类的组成部分。派生类对象一定不会比基类对象小,它保存了更多的数据。基类也称超类,派生类也称子类。(P349)
 
3、在类中,还有一种保护型的访问控制符,保护成员与私有成员一样,不能被使用类的程序员进行公共访问,但是可以被类内部的成员函数访问。除此以外,如果使用的类是派生类成员,则可以被访问,这一点区别于私有成员。也就是说,只要将类成员声明为保护成员,则其派生类在继承之后,就可以坐享其父类的公有和保护操作了。可以将派生类对象赋值给基类对象。(P350)
 
4、派生类继承了基类,并不是说派生类就能访问基类的私有成员了。(P352)
 
5、派生类如果没有定义构造函数,将会执行默认的无参构造函数。派生类的默认无参构造函数首先会调用父类的无参构造函数,如果父类定义了有参构造函数,有没有重载定义无参构造函数,则会编译错误。在构造一个子类时,完成其基类部分的构造由基类的构造函数去做,将基类对象看作是完全独立于派生类的对象。(P354)
 
6、当然,并不是非得要调用默认无参构造函数的,而是可以在派生类的构造函数中规定调用基类构造函数的形式。(P354)
 
7、在派生类中定义一个相同名字的操作(称为覆盖 overlap),目的是表明与基类操作既相似又不同,可以调用基类的同名操作,并在此基础上,加上自己特有的操作。(P356)
 
8、基类若没有自定义的拷贝构造函数,则派生类的拷贝构造函数将调用基类的默认拷贝构造函数,否则,调用基类的自定义拷贝构造函数。派生类若没有自定义拷贝构造函数,则拷贝构造时调用默认拷贝构造函数。(P356)
 
9、任何构造函数的调用,总是先分配对象本体的空间,给出该空间的this指针,然后,稳稳当当地执行构造函数的体。对于一个派生类,全部子对象的初始化类表做完后,就开始执行自身的构造函数体,这就是构造函数执行的递归顺序。(P357)
 
10、公有继承将基类的保护成员和公有成员视为自己的保护和公有成员。保护继承将基类的保护和公有成员全变成自己的保护成员。(P360)
 
11、在派生类中,可以调整成员的访问控制属性。例如,可以将公有成员调整为私有成员,将保护成员调整为公有成员。(P361)
class Base{
     int b1;
protected:
     int b2;
     void fb2() { b1 = 1;}
public:
     int b3;
     void fb3() { b1 = 1;}
};
class Pri : private Base{
public :
     using Base::b3;
};
 
12、调整访问控制属性的前提是在派生类中该成员必须是可见的。(P361)
 
13、类含义对象成员的情形称为组合。组合和继承在物理结构上都是包含关系,但是在性质上却不同。对于组合,成员对象的数据隐私是不能被直接访问的,必须通过成员对象的操作去间接访问。也就是类对象与成员对象之间是彼此独立的。(P361)
 
14、一个类可以从多个基类派生,这样的继承结构成为多重继承。多重继承可能会有基类成员的名称冲突,则为了明确访问的目的,必须在名称前面加前缀一说明基类。(P367)
int main(){
     SleeperSofa ss;
     ss.Sofa::setWeight(20);
}
 
15、含有多继承的构造函数按下列顺序被调用:(P372)

这说明,若一个类含有虚拟继承,则构造首先从虚拟基类开始。
posted on 2012-05-01 09:58  谷堆旁边  阅读(247)  评论(0编辑  收藏  举报