#include<iostream>
#include<stdlib.h>
using namespace std;
class Base1{
public:
//一般的虚函数成员声明语法:virtual 函数类型 函数名(形参表);
virtual void display() const;//定义虚函数,虚函数声明只能在类定义的原函数声明,不能再成员函数实现的时候
//虚构函数声明语法:virtual ~函数类型类名();
//纯虚函数声明语法:virtual 函数类型 函数名(参数表)=0; //基类可以不给出函数实现部分
};
void Base1::display() const{
cout<<"Base1::dispaly()"<<endl;
}
class Base2:public Base1{
public:
void display() const;//覆盖基类的虚函数
};//派生类Base2
void Base2::display() const{
cout<<"Base2::dispaly()"<<endl;
}
class Derived:public Base2{
public:
void display() const;//覆盖基类的虚函数
};//派生类 Derived
void Derived::display() const{
cout<<"Derived::displasy()"<<endl;
}
void fun(Base1 *ptr){
ptr->display();//指向基类的指针 ,因为成员函数通过指针、引用来访问虚函数
}
void fun2(Base1 *ptr){
ptr->Base1::display();//限定只调用基类的虚函数
}
int main(){
system("color 3");
Base1 base1;
Base2 base2;
Derived derived;
fun(&base1);
fun(&base2);
fun(&derived);
fun2(&base1);
fun2(&base2);
fun2(&derived);
system("pause");
return 0;
}