继承总结:
1、基类和派生类
继承的语法形式如下:
class 派生类名 : 基类名表
{
数据成员和成员函数声明
};
基类名表构成:访问控制 基类名
访问控制有3类:1)、public公有继承 2)、private私有继承 3)、protected保护继承
2、访问控制
一个派生类公有继承一个基类时,基类中所有公有成员(由public定义的数据成员或成员函数)成为派生类的公有(public)成员,基类中所有保护成员(由protected定义的数据成员或成员函数)成为派生类的保护(protected)成员。
一个派生类私有继承一个基类时,基类中所有公有成员和保护成员同时成为派生类的私有(private)成员。
一个派生类保护继承一个基类时,基类中所有公有成员和保护成员同时成为派生类的保护(protected)成员。
3、重名成员
1)、派生类生类定义了与基类同名的成员,在派生类中访问同名成员时屏蔽(hide)了基类的同名成员
2)、在派生类中使用基类的同名成员,显式地使用类名限定符:类名::成员
4、基类的初始化
1)、在创建派生类对象时用指定参数调用基类的构造函数来初始化派生类继承基类的数据
2)、派生类构造函数声明:派生类构造函数(变元表):基类(变元表),数据成员1(变元表),…,数据成员n(变元表);
3)、构造函数执行顺序:基类→对象成员→派生类
5、赋值兼容规则
1)、赋值兼容规则指在程序中需要使用基类对象的任何地方,都可以用公有派生类的对象来替代。
2)、在替代之后,派生类对象就可以作为基类的对象使用,但只能使用从基类继承的成员。
3)、一个派生类对象也是一个基类对象,一个基类对象可派上用场的地方,派生类对象一样可派上用场。反之则不然。
6、多继承
一个类有多个直接基类的继承关系称为多继承。
一、多态性
多态性可以简单概括为“一个接口,多种行为”。
向不同的对象发送同一个消息,不同的对象在接收时会产生不同的行为(即方法)。每个对象可以用自己的方式去响应共同的消 息。所谓消息,就是调用函数,不同的行为就是指不同的实现,即执行不同的函数。这是一种泛型技术,即用相同的代码实现不同的动 作。这体现了面向对象编程的优越性。
多态分为两种:
1、编译时多态:主要通过函数的重载和模板来实现。
2、运行时多态:主要通过虚函数来实现。
多态性(Polymorphism)是指一个名字,多种语义;或界面相同,多种实现。
重载函数是多态性的一种简单形式。
虚函数允许函数调用与函数体的联系在运行时才进行,称为动态联编。
二、动态联编
1、虚函数和基类指针
写有关键字virtual的成员函数称为虚函数,实现运行多态的关键是要说明虚函数,另外必须用基类指针
调用派生类的不同实现版本。
2、虚函数的重载特性
在派生类中重载基类的虚函数要求函数名、返回类型、参数个数、
参数类型和顺序完全相同
如果仅仅返回类型不同,C++认为是错误重载
如果函数原型不同,仅函数名相同,丢失虚特性
3、虚析构函数
构造函数不能是虚函数。建立一个派生类对象时,必须从类层次的根开始,沿着继承路径逐个调用基类的构造函数
析构函数可以是虚的。虚析构函数用于指引 delete 运算符正确析构动态对象
三、纯虚函数和抽象类
纯虚函数是一种特殊的虚函数,
在许多情况下,在基类中不能对虚函数给出有意义的实现,而把它声明为纯虚函数,它的实现留给该基类的派生类去做。
这就是纯虚函数的作用。
纯虚函数是一个在基类中说明的虚函数,在基类中没有定义, 要求任何派生类都定义自己的版本
纯虚函数为各派生类提供一个公共界面
纯虚函数说明形式:
virtual 类型 函数名(参数表)= 0 ;
一个具有纯虚函数的基类称为抽象类。
多态性
虚函数允许函数调用与函数体的联系在运行时才进行,称为动态联编。冠以关键字 virtual 的成员函数称为虚函数。实现运行时多态的关键首先是要说明虚函数,另外,必须用基类指针调用派生类的不同实现版本。基类指针虽然获取派生类对象地址,却只能访问派生类从基类继承的成员。
虚函数与多态性
1.多态性是指一个名字,多种语义;或界面相同,多种实现。
2.重载函数是多态性的一种简单形式。
3.虚函数允许函数调用与函数体的联系在进行时才进行,成为多态联编。
4.冠以关键词virtual的成员函数称为虚函数
5.实现运行时多态的关键首先是要说明虚函数,另外,必须用基类指针调用派生类的不同实现版本
最后总结,在图书馆之后,自己的敲代码水平也是不断发现了很多的错误,自己虚函数的应用与我想象中的那样还是有点出入,并且说真的,多态性对我来说,确实有点不太好接受,现在还是处于一种懵懵懂懂的阶段。但我自己感觉有点鸡肋,自己还是不会用啊。而继承,确实用的挺多的,我也会自己加强对继承的学习,多多运用继承。