CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

指针的强制转换

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

指向基类的指针访问子类的同名函数,一种方法是把基类的同名函数声明为虚函数,然后将子类对象的地址赋给基类指针,用该指针调用的函数就是子类的同名函数。还有还有一种办法我不确定,请各位高手指教!把基类指针强制转换成子类类型,然后用转换后的指针调用同名函数,我在vc++环境中运行,结果发现调用的是基类的函数。 问题点数:20、回复次数:11Top

1 楼iamcaicainiao(老菜,长征)回复于 2006-03-17 11:06:10 得分 2

你说的我好费解。干脆你还是把代码贴上来吧。Top

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

注意虚表。Top

3 楼iamcaicainiao(老菜,长征)回复于 2006-03-17 11:11:08 得分 8

#include   <iostream>  
  //给你个例子吧  
  using   namespace   std;  
   
  class   Base{  
  public:  
  virtual   void   f(){  
  cout<<"Base"<<endl;  
  }  
  };  
   
  class   Derived   :   public   Base{  
  public:  
  void   f(){  
  cout<<"Derived"<<endl;  
  }  
  };  
   
  void   main()  
  {  
  Derived   d;  
  Base   *   b   =   &d;  
  b->f();  
  }Top

4 楼nnlucky()回复于 2006-03-17 11:27:05 得分 0

iamcaicainiao   你好!你举的例子是虚函数的例子,这个能实现父类指针访问子类同名函数,还有一种办法,我把代码已经沾上了,你看看是否合理,谢谢!Top

5 楼pyrophile(豆子(天上云彩往下飘))回复于 2006-03-17 11:34:12 得分 1

莫非楼主要这样么:  
  Derived   *d   =   new   d;  
  Base   *   b   =   (Derived   *)d;  
  b->f();  
  //但是这样还是指向了子类的函数Top

6 楼aniude(重返荣耀)回复于 2006-03-17 11:36:46 得分 1

---------------  
  上面的结果:  
  Derived  
  嘿嘿Top

7 楼aniude(重返荣耀)回复于 2006-03-17 11:38:59 得分 2

覆盖使用了是子类的函数,隐藏的视指针指向的对象而论Top

8 楼nnlucky()回复于 2006-03-17 11:44:10 得分 0

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  
  }  
   
  Top

9 楼pyrophile(豆子(天上云彩往下飘))回复于 2006-03-17 14:54:20 得分 1

上面的代码没有错,就是指向子类的函数。Top

10 楼wang1523(大菜鸟)回复于 2006-03-17 21:11:06 得分 3

呵呵,动态调用啊Top

11 楼nnlucky()回复于 2006-03-17 21:23:53 得分 0

虚函数是动态绑定,强制转换应该是静态吧Top

相关问题

  • 关于指针的强制转换?
  • 将指针强制转换城其他的指针
  • 强制类型转换于指针的问题
  • 关于指针类型强制转换的问题
  • 如何把一个指针强制转换成一个指向函数的指针?
  • c语言的指针强制转换内部是如何实现的?
  • 急切知道答案:强制转换指针类型的问题!!!
  • long型变量和CWnd*指针之间强制转换会不会出错。
  • 强制转换类型实现父类指针访问子类同名函数
  • 指针的强制类型转换是否导致潜在的问题?

关键词

  • 函数
  • 指针
  • 转换
  • 代码
  • 子类
  • 强制转换
  • 调用
  • 同名
  • 指向
  • 基类

得分解答快速导航

  • 帖主:nnlucky
  • iamcaicainiao
  • healer_kx
  • iamcaicainiao
  • pyrophile
  • aniude
  • aniude
  • pyrophile
  • wang1523

相关链接

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

广告也精彩

反馈

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