using namespace std;
class A
{
public:
virtual int get(){return 1;}
};
class B:public A
{
public:
int get(){return 2;}
};
void main()
{
while (1)
{
cout<<"(1)父类(2)子类(3)退出:";
int choice;
cin>>choice;
A*p;
bool quit=false;
switch (choice)
{
case 1:p=new A;
break;
case 2:p=new B;
break;
case 3:quit=true;
break;
default:cout<<"请输入1、2或者3";
break;
}
if (quit==true)
{
break;
}
cout<<p->get()<<endl;
}
}
实例二:
#include<iostream>
using namespace std;
class A
{
public:
virtual int get(){return 1;}
};
class B:public A
{
public:
int get(){return 2;}
};
void main()
{
while (1)
{
cout<<"(1)父类(2)子类(3)退出:";
int choice;
cin>>choice;
A p; //将指针换成对象
bool quit=false;
switch (choice)
{
case 1:p=A();//执行父类的构造函数创建一个父类临时对象并赋给p
break;
case 2:p=B();//执行子类的构造函数创建一个子类临时对象并赋给p
break;
case 3:quit=true;
break;
default:cout<<"请输入1、2或者3";
break;
}
if (quit==true)
{
break;
}
cout<<p.get()<<endl; //用对象调用函数
}
}
//输出结果:
1
1
因为p在编译时已经确定好了
ps:在虚函数中使用动态联编必须采用指针或者引用,否则无法实现动态联编