父类指针如何访问子类数据成员变量

汽车电子讲坛 2012-12-11 09:37:06
如题, 父类指针如何访问子类数据成员变量

#include "stdafx.h"

class animal
{
public:

animal();
~animal();

public:
int i;

};

class fish:public animal
{

public:
fish();
~fish();

public:
int age;
};

int main(int argc, char* argv[])
{

animal *panimal= (fish *) new fish;

(fish *)panimal->age=5; //错误如下

while(1)
{

}
return 0;
}
error C2039: 'age' : is not a member of 'animal'

...全文
1100 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
hhyhw2001 2012-12-25
  • 打赏
  • 举报
回复
建议使用虚函数
miliggate 2012-12-25
  • 打赏
  • 举报
回复
不要这么做,会访问错误的, 如果要强访问的话 楼上就可以了 要么你用 if(typeid(类引用)==typeid(子类引用)) 成功代码
wuxupu 2012-12-24
  • 打赏
  • 举报
回复
创建构造函数 fish(const animal &)
bigwangdi 2012-12-24
  • 打赏
  • 举报
回复
引用 6 楼 Big_Wang5 的回复:
C/C++ code?123GoldFish f(1);animal* ani = &f;ani->age = 5; 这样应该可以吧,你那样用不行的
看错了,这样肯定不行的。animal*不能访问age因为animal类中没有age成员。 所谓的父类引用指向子类成员应该主要是说virtual函数
bigwangdi 2012-12-24
  • 打赏
  • 举报
回复

GoldFish f(1);
animal* ani = &f;
ani->age = 5;
这样应该可以吧,你那样用不行的
zilaishuichina 2012-12-13
  • 打赏
  • 举报
回复
引用 4 楼 mac_will 的回复:
1.虚函数 2.dynamic_cast 3.强转
+1 不建议强转
will_g 2012-12-11
  • 打赏
  • 举报
回复
1.虚函数 2.dynamic_cast 3.强转
gladstonejay 2012-12-11
  • 打赏
  • 举报
回复
1 首先说明一点 你这样做也不是基类指针访问继承类的成员 仍然是被强制转化为继承类之后才去访问 这样做是不安全的做法 可以考虑使用dynamic_cast进行安全的类型向下转换 甚至可以考虑使用RTTI 2 其实最好的方法是使用虚函数 这点可以在程序设计的时候考虑进去
汽车电子讲坛 2012-12-11
  • 打赏
  • 举报
回复
但 调试的时候看不到age 新代码如下 #include "stdafx.h" class animal { public: }; class fish:public animal { public: int age; }; class Goldfish { public: Goldfish(int &i); }; Goldfish::Goldfish(int &i) { i=7; } int main(int argc, char* argv[]) { int k=0; fish fsh; fsh.age=3; animal *panimal= (fish *) new fish; Goldfish gld (((fish *)panimal)->age); k=((fish *)panimal)->age; while(1) { } return 0; }
GGFlag 2012-12-11
  • 打赏
  • 举报
回复
(fish *)panimal->age=5; 改为 ((fish *)panimal)->age=5; new的地方记得用delete释放。

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧