1:类型转换规则
(1):一个公有派生类对象在使用上可以被当做基类的对象,反之则禁止。具体体现在:
a:派生类对象可以隐含转换为基类对象。
b:派生类的对象可以初始化基类的引用。
c:派生类的指针可以隐含转换为基类的指针。
(2)通过基类对象名,指针只能使用从基类继承的成员
2:虚函数
(1):虚函数是用virtual关键字说明的函数。
(2):虚函数是实现运行时多态性基础
(3):C++中的虚函数是动态绑定的函数
(4):虚函数必须是静态非成员函数,虚函数经过派生之后,就可以实现运行过程中的多态。
#include<iostream>using namespace std;class Person{public:void point()//virtual void point(){cout<<"Person"<<endl;}};class son1:public Person{public:void point(){cout<<"son1"<<endl;}};class son2:public son1{public:void point(){cout<<"son2"<<endl;}};void show(Person *p){p->point();}int main(){Person p1;son1 p2;son2 p3;show(&p1);show(&p2);show(&p3);return 0;}
这段代码在基类为加虚函数时结果为 :三个Person
二加上virtual 这个关键字后:结果为:Person
son1
son2
这个关键字虚基类必须加 派生类加不加不影响。
3多态性
多态性是指不同类的对象对同一消息的不同响应。

4动态绑定
(1):在编译时,我们不能预知p指向Student还是指向Perfessor。
(2)在运行时,通过判断p指向的特定对象是什么,从而决定调用那个版本的print()函数。
要点:
1:具有类的继承关系图,这个继承关系中每个类都可以调试用一个虚函数;
2:基础类的指针指向子类对象;
3:通过基础类的指针调用虚函数。
5:虚析构函数
结果为:
造成这样的主要原因时 红色字体哪里
若将红色字体哪里改为 Base b;
则不需要虚析构函数就会有这个答案
