先声明类: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; } |
继承的话,你不应该拿父类指针指向之类对象。
白衣染霜花
TA贡献1796条经验 获得超10个赞
C++重载、重写均是多态: 1)从语法上说:重载必须函数名和返回值一致,且参数顺序、个数和类型(有一个不一样),而重写必须函数名和返回值一致,且参数顺序、个数和类型(必须全一样)。2)重载可以用于一个类自身内部,也可以用于继承类;重写只能用于继承类关系中。3)重载一般用于需要在某些参数允许被缺省的情况下完成(可省略参数的函数)。重写用于“工厂模式”以及其衍生产品中发挥作用。
- 2 回答
- 0 关注
- 641 浏览
添加回答
举报
0/150
提交
取消