#include<iostream>
using namespace std;
class father
{
public:
virtual void smart(){cout<<"父亲很聪明\n";} //父类的smart()函数
};
class son:public father
{
public:
virtual void beautiful(){cout<<"儿子也很帅\n";} //子类的beautiful函数
};
int main()
{
father *Mike[5]; //声明了一个含有5个成员的数组指针,该指针指向父类father
father*pf; //声明了一个指向父类father的pf指针
int choice,i; //定义两个整型变量
for(i=0;i<5;i++) //循环5次
{
cout<<"(1)father(2)son;"; //输出一个选择菜单
cin>>choice; //接受用户输入并将其保存在choice中
if(choice==2) //假如choice等于2
pf=new son; //在堆中建立一个son类对象,并用father类的指针pf来指向它
else
pf=new father; //否则的话,在堆中建立一个father类对象,并用father类的指针pf来指向它
Mike[i]=pf; //用户每选择一次,便将指针pf保存在father类的数组指针mike中
son *ps=dynamic_cast<son*>(Mike[i]); //将指向父类的Mike[i]转成指向子类的指针,然后赋给子类的指针ps
if(ps) //假如ps不为,也就是说转换成功的话
ps->beautiful(); //用该指针访问子类的beautiful函数
else //转换不成功
cout<<"父亲的指针\n"; //输出信息
delete Mike[i]; //程序末尾删除father类数组指针mike
}
cout<<"\n";
system("pause");
return 0;
using namespace std;
class father
{
public:
virtual void smart(){cout<<"父亲很聪明\n";} //父类的smart()函数
};
class son:public father
{
public:
virtual void beautiful(){cout<<"儿子也很帅\n";} //子类的beautiful函数
};
int main()
{
father *Mike[5]; //声明了一个含有5个成员的数组指针,该指针指向父类father
father*pf; //声明了一个指向父类father的pf指针
int choice,i; //定义两个整型变量
for(i=0;i<5;i++) //循环5次
{
cout<<"(1)father(2)son;"; //输出一个选择菜单
cin>>choice; //接受用户输入并将其保存在choice中
if(choice==2) //假如choice等于2
pf=new son; //在堆中建立一个son类对象,并用father类的指针pf来指向它
else
pf=new father; //否则的话,在堆中建立一个father类对象,并用father类的指针pf来指向它
Mike[i]=pf; //用户每选择一次,便将指针pf保存在father类的数组指针mike中
son *ps=dynamic_cast<son*>(Mike[i]); //将指向父类的Mike[i]转成指向子类的指针,然后赋给子类的指针ps
if(ps) //假如ps不为,也就是说转换成功的话
ps->beautiful(); //用该指针访问子类的beautiful函数
else //转换不成功
cout<<"父亲的指针\n"; //输出信息
delete Mike[i]; //程序末尾删除father类数组指针mike
}
cout<<"\n";
system("pause");
return 0;
}
dynamic_cast 将基类指针转换为派生类指针