为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++
繁花如伊 2019-07-07 08:04:47
先声明类: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 *另外,不能实现就说”不能实现“。我已经准备好用别的方法来实现原来的程序逻辑。
查看完整描述

2 回答

?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

你的示例代码并非多态,而是继承。多态的话typeid是可以获取正确类型的,如示:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

class Father{

public:

    virtual void f() {}    // 虚函数,多态

};

 

class Child: public Father {

public:

    void f(){}

};

 

int main(){

    Father *p;

    p = new Father;

    cout << typeid(*p).name() << endl;    // 注意是 *p,因为读取p指向对象的typeinfo块

    p = new Child;

    cout << typeid(*p).name() << endl;

}

继承的话,你不应该拿父类指针指向之类对象。

 


查看完整回答
反对 回复 2019-07-08
?
白衣染霜花

TA贡献1796条经验 获得超10个赞

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

查看完整回答
反对 回复 2019-07-08
  • 2 回答
  • 0 关注
  • 641 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信