两个基类(接口)中有一个完全一样的纯虚函数,派生类中只有一份实现,但可以正常编译、运行。为什么?

BorrowedStory 2014-06-13 08:37:21

struct InterfaceA
{
virtual void function() = 0;
};

struct InterfaceB
{
virtual void function() = 0;
};

class Object
: public InterfaceA
, public InterfaceB
{
public:
void function() override
{
return ;
}
};

int main()
{
Object o;
InterfaceA* ia = &o;
InterfaceA* ib = &o;
ia->function();
ib->function();
o.function();
return 0;
}


为什么ia、ib和o都可以正常调用function?总感觉看起来很变扭。
那位大牛能给我解释一下!!!
...全文
158 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaolomg 2014-06-15
  • 打赏
  • 举报
回复
写代码之前首先想想 要实现什么功能. 而你写的两个接口类严重耦合,再谈语法无意义.
BorrowedStory 2014-06-13
  • 打赏
  • 举报
回复
引用 8 楼 taodm 的回复:
这个代码非常规范。 你要真好奇心强,就去啃《深度探索C++对象模型》。啃过了,你就发现完全是浪费生命。
C++ 对象模型 是一本很屌的书,我在看只是才开始看而已。 另外,网上也找到了一篇文章,比较详细,http://blog.csdn.net/haoel/article/details/1948051/ 当然,我个人感觉taodm说的对,依赖上面那种结构的代码不会是很好的代码。
taodm 2014-06-13
  • 打赏
  • 举报
回复
这个代码非常规范。 你要真好奇心强,就去啃《深度探索C++对象模型》。啃过了,你就发现完全是浪费生命。
BorrowedStory 2014-06-13
  • 打赏
  • 举报
回复
引用 6 楼 taodm 的回复:
你不需要对它熟。凡是必须要倚靠此结构的编程行为,都不是正规编程行为。
引用 5 楼 yangsongqbs 的回复:
其实我想知道的是虚表的结构,我对虚表不太熟。
我知道这很不规范,要不然我问个毛啊,我就是感觉这很诡异,想弄明白而已啊,大神。
taodm 2014-06-13
  • 打赏
  • 举报
回复
你不需要对它熟。凡是必须要倚靠此结构的编程行为,都不是正规编程行为。
引用 5 楼 yangsongqbs 的回复:
其实我想知道的是虚表的结构,我对虚表不太熟。
BorrowedStory 2014-06-13
  • 打赏
  • 举报
回复
其实我想知道的是虚表的结构,我对虚表不太熟。
taodm 2014-06-13
  • 打赏
  • 举报
回复
哎,除了说要认真看书,就只有看书要认真了。
gergul 2014-06-13
  • 打赏
  • 举报
回复
ia->function(); ib->function(); o.function(); 调用的都是Object::function()。
飞天御剑流 2014-06-13
  • 打赏
  • 举报
回复
这能有什么回事呢?无论ia还是ib调用,object中的function都是final overrider,就这样而已,基础知识,任何一本C++书籍都会讲述,还需要作何解释?
BorrowedStory 2014-06-13
  • 打赏
  • 举报
回复
没人知道是怎么回事?

64,652

社区成员

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

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