七、继承与派生
1、protected成员的特点
(1)对其所在类的对象来说,它与 private 成员的性质相同。
(2)对其派生类来说,它与 public 成员的性质相同。
2、通过基类对象名、指针只能使用从基类继承的成员。
(大指小可以,小指大不行)
3、派生类的构造函数需要给基类的构造函数传递参数。
4、当基类声明有带形参的构造函数时,派生类也必须声明带形参的构造函数,并将参数传递给基类构造函数。
5、如要通过派生类对象访问基类中被隐藏的同名成员,应使用基类名限定。
6、在第一级继承时就要将共同基类设计为虚基类。
7、在建立对象时,只有最派生类的构造函数调用虚基类的构造函数,该派生类的其他基类对虚基类构造函数的调用被忽略。
8、在整个继承结构中,直接或间接继承虚基类的所有派生类,都必须在构造函数的成员初始化表中给出对虚基类的构造函数的调用。如果未列出,则表示调用该虚基类的默认构造函数。
八、多态性
1、可以重载C++中除下列运算符外的所有运算符: .(引用对象成员) .*(引用指向类成员的指针) ::(域名限定) ?:(三元运算符)
2、只能重载C++语言中已有的运算符,不可臆造新的。
3、不改变原运算符的优先级和结合性。 不能改变操作数个数。
4、经重载的运算符,其操作数中至少应该有一个是自定义类型。
5、前置单目运算符,重载函数没有形参,对于后置单目运算符,重载函数需要有一个整型形参。
6、加、减法运算符重载
7、前、后置单目运算符重载
++oprd相当于oprd.operator++()
oprd++相当于oprd.operator++(0)
运算符调用:
8、虚函数注意事项
(1)virtual 只用来说明类声明中的原型,不能用在函数实现时。
(2)具有继承性,基类中声明了虚函数,派生类中无论是否说明,同原型函数都自动为虚函数。
(3)本质:不是重载声明而是覆盖。
(4)调用方式:通过基类指针或引用,执行时会根据指针指向的对象的类(多态),决定调用哪个函数。
9、抽象类只能作为基类来使用。
10、不能声明抽象类的对象。
11、构造函数不能是虚函数,析构函数可以是虚函数。
12、个人理解:虚函数、虚基类等的存在就是用来解除类型兼容规则带来的限制,使得我们可以想调用哪个类(基类or派生类)的函数就调用哪个。
九、流类库与输入、输出
1、整个流类体系是一个派生类体系。按ANSI C++标准,类ios是抽象类,它的析构函数是虚函数,它的构造函数为保护的,作为所有基本流类的虚基类。
2、