c++怎么在多态的条件下判断变量类型

先声明类:
class Father
{
};
class Child
:public Father
{
};

然后我这样写:
Father *pFather1 = new Father;

Father *pFather2 = new Child;//这里多态地指向了Child

怎样判断哪个是实际指向Father的指针,哪个是实际指向Child的指针?
请附代码。

错误写法:
cout<<typeid(pFather1 ).name()<<endl;
cout<<typeid(pFather2 ).name()<<endl;
两个都显示class father *
另外,不能实现就说”不能实现“。我已经准备好用别的方法来实现原来的程序逻辑。

繁花如伊
浏览 643回答 2
2回答

天涯尽头无女友

你的示例代码并非多态,而是继承。多态的话typeid是可以获取正确类型的,如示:1234567891011121314151617class&nbsp;Father{public:&nbsp;&nbsp;&nbsp;&nbsp;virtual&nbsp;void&nbsp;f()&nbsp;{}&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;虚函数,多态};&nbsp;class&nbsp;Child:&nbsp;public&nbsp;Father&nbsp;{public:&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;f(){}};&nbsp;int&nbsp;main(){&nbsp;&nbsp;&nbsp;&nbsp;Father&nbsp;*p;&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;=&nbsp;new&nbsp;Father;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;<<&nbsp;typeid(*p).name()&nbsp;<<&nbsp;endl;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;注意是&nbsp;*p,因为读取p指向对象的typeinfo块&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;=&nbsp;new&nbsp;Child;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;<<&nbsp;typeid(*p).name()&nbsp;<<&nbsp;endl;}继承的话,你不应该拿父类指针指向之类对象。&nbsp;

白衣染霜花

C++重载、重写均是多态: 1)从语法上说:重载必须函数名和返回值一致,且参数顺序、个数和类型(有一个不一样),而重写必须函数名和返回值一致,且参数顺序、个数和类型(必须全一样)。2)重载可以用于一个类自身内部,也可以用于继承类;重写只能用于继承类关系中。3)重载一般用于需要在某些参数允许被缺省的情况下完成(可省略参数的函数)。重写用于“工厂模式”以及其衍生产品中发挥作用。
打开App,查看更多内容
随时随地看视频慕课网APP