关于指向基类指针调用子类虚函数的问题

Keynn 2012-10-30 08:36:18
我现在有一个基类相当于接口
interface A
{
virtual void fun() = 0;
}

子类
class B: public A
{
virtual void fun()
{
}
}

class C: public A
{
virtual void fun()
{
cout << "nihao";
}
}

现在我想这样调用:
main ()
{
A a = new B();
// 如何实现 a->fun();实际上去调用C::fun()
}

在线等高手解答
...全文
337 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
pathuang68 2012-11-01
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
我现在有一个基类相当于接口
interface A
{
virtual void fun() = 0;
}

子类
class B: public A
{
virtual void fun()
{
}
}

class C: public A
{
virtual void fun()
{
cout << "nihao";
……
[/Quote]

从理论上来说,这种想法就是错误的。
baichi4141 2012-11-01
  • 打赏
  • 举报
回复
楼主你真的知道什么是虚函数吗?
跟实际类型绑定的叫做虚函数,你的对象实际类型是B,你却要它调用C的虚函数?更何况要调用的地方根本不知道C是个什么东西?
这不叫虚函数,这叫你发明了一种新语法新思想。
jiuyueshouyi 2012-10-31
  • 打赏
  • 举报
回复
我凌乱了,好吧 C呢,快来吃饭
taodm 2012-10-30
  • 打赏
  • 举报
回复
编程不是瞎折腾,不要在错误的问题上去试图寻找“正确”解。
Keynn 2012-10-30
  • 打赏
  • 举报
回复
楼上的,说的都不是我想要的结果。

我再补充一下,其实调用函数的地方是在另外一个类里面,这个类里面不知道有类C,我类C也可以继承类B
在类D里面

class D
{
D()
{
A *a = new B();
a->fun() // 这里我想调用C的fun
}
}
xiaohutushen30 2012-10-30
  • 打赏
  • 举报
回复
A *a=new C();
a->fun();
这样调用的就是C的fun,这是多态的作用!
xiaoxiong5227 2012-10-30
  • 打赏
  • 举报
回复
别用纯虚函数
将父类改为:virtual void fun(){}

65,208

社区成员

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

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