CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

强制转换类型实现父类指针访问子类同名函数

楼主nnlucky()2006-03-17 11:22:35 在 C/C++ / C++ 语言 提问

指向基类的指针访问子类的同名函数,一种方法是把基类的同名函数声明为虚函数。还有还有一种办法我不确定,请各位高手指教!就是把基类指针强制转换成子类类型,然后用转换后的指针调用同名函数,我在vc++环境中运行,结果发现调用的是子类的函数。  
  class   class1  
  {  
  public:  
  int   fun()  
  {return   100;  
  }  
  };  
  class   subclass1:public   clsss1  
  {  
  public:  
  int   fun()  
  {return   200;  
  }  
  };  
  int   main()  
  {class1   *p;  
  p=new   subclass1();  
  int   x;  
  x=((sunclsss1   *)p)->fun();  
  printf("%d\n",x);//结果是200  
  }  
  问题点数:20、回复次数:14Top

1 楼healer_kx(甘草(楼主揭贴吧,我们这些上班灌水的也不容易))回复于 2006-03-17 11:25:46 得分 1

你写出这个事实干吗啊?Top

2 楼nnlucky()回复于 2006-03-17 11:28:19 得分 0

??事实?Top

3 楼wohow()回复于 2006-03-17 11:28:29 得分 5

这是静态联编,可以这样用,前提是强制转换是正确的就行了Top

4 楼du51(郁郁思扬)回复于 2006-03-17 11:29:09 得分 3

把基类指针强制转换成子类类型  
   
  p=new   subclass1();  
  x=((sunclsss1   *)p)->fun();Top

5 楼nnlucky()回复于 2006-03-17 11:30:26 得分 0

这也是应该是实现父类指针访问子类同名函数的办法吧Top

6 楼pyrophile(豆子(天上云彩往下飘))回复于 2006-03-17 11:38:10 得分 2

就是呀,这样做没有什么错。Top

7 楼nnlucky()回复于 2006-03-17 11:41:33 得分 0

谢谢了!对于这个强制转换后的指针,此时只能访问子类新增的public成员吗?Top

8 楼pyrophile(豆子(天上云彩往下飘))回复于 2006-03-17 11:47:35 得分 3

访问不了子类特有的函数。Top

9 楼nnlucky()回复于 2006-03-17 11:55:57 得分 0

嗯?可以吧,强制转换后可以当成子类的指针使用,这种情况下按理说应该可以访问子类用public声明的函数,如:  
  class   class1  
  {  
  public:  
  int   fun()  
  {return   100;  
  }  
  };  
  class   subclass1:public   clsss1  
  {  
  public:  
  int   fun()  
  {return   200;  
  }  
  int   funnew()  
  {  
  return   566;  
  }  
  };  
  int   main()  
  {class1   *p;  
  p=new   subclass1();  
  int   x;  
  x=((sunclsss1   *)p)->fun();  
  x=((sunclsss1   *)p)->funnew();  
  printf("%d\n",x);  
  }  
  Top

10 楼pyrophile(豆子(天上云彩往下飘))回复于 2006-03-17 17:06:18 得分 2

x=((sunclass1   *)p)->funnew();//那是指向子类的指针当然可以访问了。Top

11 楼adintr(www.adintr.com)(风流总被雨打风吹去)回复于 2006-03-17 17:12:49 得分 0

这不应该叫办法,  
  应该叫拙略的设计Top

12 楼nnlucky()回复于 2006-03-17 17:19:46 得分 0

adintr   给点鼓励嘛,别那么刻薄Top

13 楼hyallentong(Caniggia)回复于 2006-03-17 17:28:02 得分 3

ms用reinterpret_cast<>稍好一点Top

14 楼Jinhao(辣子鸡丁·GAME就这样OVER了)回复于 2006-03-17 17:59:33 得分 1

如果是多重继承呢?Top

相关问题

  • 为什麽,父类的函数指针不能指向子类的函数,请帮我看看,高分给你
  • 函数指针
  • 指针函数
  • 函数指针
  • 函数指针
  • 函数指针
  • 函数指针和指针函数
  • 函数指针,唉.......
  • 如何使用子类化函数subclass()?
  • 子类与基类的函数

关键词

  • 函数
  • 指针
  • 转换
  • 子类
  • 同名函数
  • 强制转换
  • sunclsss
  • 访问
  • funnew
  • subclass

得分解答快速导航

  • 帖主:nnlucky
  • healer_kx
  • wohow
  • du51
  • pyrophile
  • pyrophile
  • pyrophile
  • hyallentong
  • Jinhao

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo