#include<bits/stdc++.h>
using namespace std;
class A
{
public:
void prin() { cout<<"This is A"<<endl;}
};
class B:public A
{
public:
void prin() {cout<<"This is B"<<endl;}
};
int main()
{
A a;
B b;
A* p1=&a;
A* p2=&b;
p1->prin();
p2->prin();
}
得到:
This is A
This is A
#include<bits/stdc++.h>
using namespace std;
class A
{
public:
virtual void prin() { cout<<"This is A"<<endl;}
};
class B:public A
{
public:
void prin() {cout<<"This is B"<<endl;}
};
int main()
{
A a;
B b;
A* p1=&a;
A* p2=&b;
p1->prin();
p2->prin();
}
得到:
This is A
This is B
多态性:一个名字多种语义,或界面相同多种实现。重载函数是多态性的一种简单形式 。
动态联编:虚函数允许函数调用与函数体的联系
虚函数声明格式:virtual 成员函数。虚函数必须是类的成员函数。
构造函数不能是虚函数但析构函数可以是虚函数。
一个虚函数在派生类中相同的重载函数都保持虚函数的特性。
不能将友元函数说明为虚函数,但是虚函数可以称为另一个类的友元。
实现多态:实现运行时多态的关键首先是要说明虚函数,另外,必须用基类指针调用派生类的不同实现版本,而且通过基类的指 针只能访问派生类从基类中继承的成员。
纯虚函数:纯虚函数是一种特殊的虚函数,在基类中只把它声明为纯虚函数不进行定义,在基类的派生类中进行定义实现功能。 纯虚函数为各个派生类提供一个公共界面。
一个具有纯虚函数的基类称为抽象类。
抽象类不能建立对象可以声明引用和对象。
说明形式:virtual 类型 函数名(参数表)=0