指向基类对象的指针要访问派生类中的成员

raincross98 2008-04-28 04:24:21
声明为指向基类对象的指针,当其指向派生类对象时,只能利用它来直接访问派生类中从基类继承来的成员,不能直接访问公有派生类中特定的成员。 若想访问其公有派生类的成员,可以将基类指针显式类型转换为派生类指针来实现请问:如何将将基类指针显式类型转换为派生类指针?如下述程序:若要使指针ptr1指向派生类中的show函数,该如何转换?
#include<iostream.h>
#include<string.h>
class string
{char *name;
int length;
public:
string(char *str)
{length=strlen(str);
name=new char[length+1];
strcpy(name,str); }
void show(){cout<<name<<endl;}
};
class de_string:public string
{
int age;
public:
de_string(char *str,int age):string(str)
{de_string::age=age;}
void show()
{string::show();
cout<<“the age is:”<<age<<endl;}  };
main()
{string s1("Smith"),*ptr1; //定义string类对象s1及指针ptr1
de_string s2(“Jean”,20),*ptr2;//定义de_string类对象s2及指针ptr2
ptr1=&s1; //将ptr1指向s1对象
ptr1->show();  //调用string类的成员函数
ptr1=&s2; //将ptr1指向string类的派生类de_string的对象s2
ptr1->show(); //调用s2对象所属的基类的成员函数show()
ptr2=&s2; //将ptr2指向de_string类对象s2
ptr2->show(); //调用de_string类的成员函数show()
return 1;}
...全文
413 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
dreamgis 2010-10-17
  • 打赏
  • 举报
回复
说的好
chary8088 2008-09-28
  • 打赏
  • 举报
回复
下行转换
arong1234 2008-05-01
  • 打赏
  • 举报
回复
你virtual关键字白学了,不就ptr1->show就可以?不然virtual还玩沙
[Quote=引用 3 楼 qmm161 的回复:]
若要使指针ptr1指向派生类中的show函数,该如何转换?

声明基类中 show() 为 virtual
[/Quote]
UltraBejing 2008-05-01
  • 打赏
  • 举报
回复
我也想了解,谢谢LZ.
knowledge_Is_Life 2008-04-30
  • 打赏
  • 举报
回复
都是很好的建议! 值得学习
meiZiNick 2008-04-30
  • 打赏
  • 举报
回复
有问题请先GOOGLE,BAIDU
qmm161 2008-04-28
  • 打赏
  • 举报
回复
若要使指针ptr1指向派生类中的show函数,该如何转换?

声明基类中 show() 为 virtual
kakaying 2008-04-28
  • 打赏
  • 举报
回复
楼上正解
晨星 2008-04-28
  • 打赏
  • 举报
回复
如何将将基类指针显式类型转换为派生类指针?
==================
Base* pBase = ....

Derived* p = static_cast<Derived*>(pBase);
或者:
Derived* p = dynamic_cast<Derived*>(pBase);

65,180

社区成员

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

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