先说什么是静态类型和动态类型。静态类型是变量声明时的类型或表达式生成时的类型,编译时已知;动态类型是变量或表达式表示的内存中的对象的类型,运行时才可知。
C++多态性的实现方法:在基类的函数前加上virtual关键字,在派生类中重写该函数,通过基类的指针或引用调用虚函数时,如果指针或引用所指对象是派生类,就调用派生类的函数;如果所指对象是基类,就调用基类的函数。
例:
#include<iostream>
using namespace std;
class automobile
{
public:
virtual void My_name()
{
cout<<"this is automobile"<<endl;
}
};
class car:public automobile
{
public:
void My_name()
{
cout<<"this is car"<<endl;
}
};
int main()
{
car CAR;
automobile AUTO;
automobile *p_automobile=&CAR;
automobile *pp_automobile=&AUTO;
p_automobile->My_name();
pp_automobile->My_name();
return 0;
}
输出为:
this is car
this is automobile
如果基类没有加virtual,则变成普通的类型转换,将派生类的对象地址复制给指向基类的指针时,调用的只是基类的构造函数,故基类指针中只保留派生类中基类部分的内容。
例:
#include<iostream>
using namespace std;
class automobile
{
public:
void My_name()
{
cout<<"this is automobile"<<endl;
}
};
class car:public automobile
{
public:
void My_name()
{
cout<<"this is car"<<endl;
}
};
int main()
{
car CAR;
automobile *p_automobile=&CAR;
p_automobile->My_name();
return 0;
}
此时输出:
this is automobile