#include <iostream>
#include <string>
using namespace std;
/*---------------------------------
13-9 三种调用虚函数的方式比较
---------------------------------*/
class father
{
public:
virtual void run()const
{cout<<"父亲可以跑一万米"<<endl;}
};
class son :public father
{
public:
void run()const
{cout<<"儿子可以跑十万米"<<endl;}
};
class daughter :public father
{
public:
void run()const
{cout<<"女儿可以跑十万米"<<endl;}
};
void A(father); //形参为father类的对象
void B(father*); //形参为father类的指针
void C(father&); //形参为father类的引用
int main()
{
father *p=0;
int choice;
bool quit =false;
while(1)
{
cout<<"0)quit 1)son 2)daughter 3)father: ";
cin>>choice;
switch(choice)
{
case 0: quit=true;
break;
case 1:
p = new son;
A(*p); //创建子类的对象,将调用父类的信息,因为函数A()是对象调用
break; //将不会呈现出多态性
case 2:
p = new daughter;
B(p);
break;
case 3:
p = new father;
C(*p); //取指针运算符的方式取得对象的引用
break;
default:
cout<<"请输入0到3之间的数字: "<<endl;
}
if(true==quit)
break;
}
return 0;
}
void A(father A) //形参为father类的对象
{ //由于是用对象的方式来调用虚函数,那就不会有多态作用
A.run(); //那么派生类赋给基类对象,将不会调用派生类的同名函数
}
void B(father* B) //形参为father类的指针
{
B->run();
}
void C(father& C) //形参为father类的引用
{
C.run();
}
运行结果:
0)quit 1)son 2)daughter 3)father: 1
父亲可以跑一万米
0)quit 1)son 2)daughter 3)father: 2
女儿可以跑十万米
0)quit 1)son 2)daughter 3)father: 3
父亲可以跑一万米
0)quit 1)son 2)daughter 3)father: 0
Press any key to continue
C++ 虚函数 6-- 三种调用虚函数的方式比较->通过对象、指针、引用
最新推荐文章于 2024-08-01 17:11:41 发布