c++与c的最大区别就是c++面向对象,c面向过程。
本次学习觉得最难的是多态性这个地方,所以现在来试着总结一下。
所谓多态性就是不同对象收到相同的消息时,产生不同的动作。这样,就可以用同样的接口访问不同功能的函数,从而实现一个接口多种方法。
主要实现是通过虚函数来进行实现。
虚函数的定义是在基类中进行的,它是在基类中需要定义为虚函数的成员函数的声明中冠以关键字virtual,从而提供一种接口界面。
定义方式:
virtual 返回类型 函数名(形参表)
{ 函数体 }
C++规定,如果在派生类中,没有用virtual显式地给出虚函数声明,这时系统就会遵循以下的规则来判断一个成员函数是不是虚函数:该函数与基类的虚函数是否有相同的名称、参数个数以及对应的参数类型、返回类型或者满足赋值兼容的指针、引用型的返回类型。
含有纯虚函数得类是抽象类,抽象类不能实例化,抽象类只能作为其他类的基类来使用。
虚函数主要的几点:
1. 由于虚函数使用的基础是赋值兼容规则,而赋值兼容规则成立的前提条件是派生类从其基类公有派生。因此,通过定义虚函数来使用多态性机制时,派生类必须从它的基类公有派生。
2. 必须首先在基类中定义虚函数;
在派生类对基类中声明的虚函数进行重新定义时,关键字virtual可以写也可以不写。
3. 虽然使用对象名和点运算符的方式也可以调用虚函数但是,这种调用是在编译时进行的静态连编,它没有充分利用虚函数的特性,只有通过基类指针访问虚函数时才能获得运行时的多态性
一个虚函数无论被公有继承多少次,它仍然保持其虚函数的特性。
4. 虚函数必须是其所在类的成员函数,而不能是友元函数,也不能是静态成员函数,因为虚函数调用要靠特定的对象来决定该激活哪个函数。
5. 内联函数不能是虚函数,因为内联函数是不能在运行中动态确定其位置的。即使虚函数在类的内部定义,编译时仍将其看做非内联的。
6. 构造函数不能是虚函数,但是析构函数可以是虚函数,而且通常说明为虚函数。