关于纯虚函数继承问题

墓后煮屎人 2012-06-21 04:55:23
class A
{
public:
virtual void add()=0;
};

class B: public A
{
public:
virtual void add()=0;

};

class C: public B
{
public:
virtual void add(){};
};
请问C中调用的是A中add的还是B中的add。。。

怎样才可以调用A中的add。。


...全文
270 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
bsnry 2012-06-23
  • 打赏
  • 举报
回复

看12楼
能解答12楼的说法吗

另外:我觉得纯虚函数实现了, 和普通的虚函数一样了

就毫无意义

纯函数就是为引进抽象类这个概念

[Quote=引用 13 楼 的回复:]

C/C++ code

class A
{
public:
virtual void add()=0
{
cout<<"a"<<endl;
}
};

class B:public A
{
public:
virtual void add()=0
{
cout<<"b"<<endl;
}
};

class C:p……
[/Quote]
coolstand 2012-06-23
  • 打赏
  • 举报
回复

class A
{
public:
virtual void add()=0
{
cout<<"a"<<endl;
}
};

class B:public A
{
public:
virtual void add()=0
{
cout<<"b"<<endl;
}
};

class C:public B
{
public:
void add()
{
cout<<"c"<<endl;
A::cat();
}
};

int main(int argc, char* argv[])
{
A *c = new C;

c->add();

return 0;
}

结果是:
c
a

1. add纯虚后,有子类实现函数细节,所以调用的是子类的实现。
2. 父类纯虚函数实现细节,也是可以的,没有规定纯虚一定不能实现。
bsnry 2012-06-23
  • 打赏
  • 举报
回复
???

继承A和继承B一样的啊


B 中的纯虚函数再次定义,

没有实现

B若没有定义,那么是A的




[Quote=引用 11 楼 的回复:]

应该是让C中的虚函数继承A中的虚函数,而不是B中的虚函数。
B中会不会有一个同名的非纯虚函数的虚函数 呢。
[/Quote]
2012-06-23
  • 打赏
  • 举报
回复
应该是让C中的虚函数继承A中的虚函数,而不是B中的虚函数。
B中会不会有一个同名的非纯虚函数的虚函数 呢。
2012-06-23
  • 打赏
  • 举报
回复
应该是B中的,你在B中定义了一个纯虚,那么就会把A中的纯虚给覆盖掉。

如果要调用A中的。
不清楚了。
q244767346 2012-06-22
  • 打赏
  • 举报
回复
A B都是抽象类,无法实例化,C中给出了 Add();的具体实现,Add 也就有了实际意义,
所以 调用的是 C中的 Add();
pathuang68 2012-06-22
  • 打赏
  • 举报
回复
纯虚函数就是只有声明,没有实现的函数。A中的add是无法被调用的。
墓后煮屎人 2012-06-21
  • 打赏
  • 举报
回复
错了错了。。c中不是普通函数不是虚函数
新铺村长 2012-06-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

在C中实现add的话 就在vtable中覆盖了add
在C中调用的是C自身的add
怎么都调不到A的add
[/Quote]

楼主正解
wshn13 2012-06-21
  • 打赏
  • 举报
回复
在C中实现add的话 就在vtable中覆盖了add
在C中调用的是C自身的add
怎么都调不到A的add
sl51314240 2012-06-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

1.C调用的是他自己的add
2.
void C::add()
{
A::add();
}
[/Quote]

写错了,原来你那是纯虚函数,纯虚函数哪有方法啊
sl51314240 2012-06-21
  • 打赏
  • 举报
回复
1.C调用的是他自己的add
2.
void C::add()
{
A::add();
}
jackyjkchen 2012-06-21
  • 打赏
  • 举报
回复
纯虚函数本来就没有实现,何来调用,你想说的是继承A还是继承B吧……

64,654

社区成员

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

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