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;
则不需要虚析构函数就会有这个答案