C++之虚函数
看下面两段代码:
程序1:
#include
using namecpace std;
class B0 //基类B0声明
{
public:
void display(){cout<<“B0::display()”<<endl;} //公有成员函数
};
class B1: public B0
{
public:
void display(){cout<<“B1::display()”<<endl;}
};
class D1: public B1
{
public:
void display(){cout<<“D1::display()”<<endl;}
};
void fun(B0 *ptr)
{
ptr->display(); //“对象指针->成员名”
}
void main() //主函数
{
B0 b0; //声明B0类对象
B1 b1; //声明B1类对象
D1 d1; //声明D1类对象
B0 *p; //声明B0类指针
p=&b0; //B0类指针指向B0类对象
fun§;
p=&b1; //B0类指针指向B1类对象
fun§;
p=&d1; //B0类指针指向D1类对象
fun§;
}
运行结果:
B0::display()
B0::display()
B0::display()
程序2:
#include
using namespace std;
class B0 //基类B0声明
{public: //外部接口
virtual void display() //虚成员函数
{cout<<“B0::display()”<<endl;}
};
class B1: public B0 //公有派生
{ public:
void display() { cout<<“B1::display()”<<endl; }
};
class D1: public B1 //公有派生
{ public:
void display() { cout<<“D1::display()”<<endl; }
};
void fun(B0 *ptr) //普通函数
{ ptr->display(); }
void main() //主函数
{ B0 b0, *p; //声明基类对象和指针
B1 b1; //声明派生类对象
D1 d1; //声明派生类对象
p=&b0;
fun§; //调用基类B0函数成员
p=&b1;
fun§; //调用派生类B1函数成员
p=&d1;
fun§; //调用派生类D1函数成员
}
运行结果:
B0::display()
B1::display()
D1::display()