当虚函数遇到多继承

#include "stdafx.h"
#include <iostream>
using namespace std;
class Father {
public:
	virtual void func() {
		cout << "Father" << endl;
	}
	//virtual void func() = 0;
};
class Mather {
public:
	void func() {
		cout << "Mather" << endl;
	}
};
class Child :public Father, public Mather {
//public:
//<span style="white-space:pre">	</span>void func() {
//<span style="white-space:pre">		</span>cout << "Child" << endl;
//<span style="white-space:pre">	</span>}
};
int main()
{
	Father* f;
	Mather* m;
	Child* c, child;
	f =  c = &child;
	m = c;
	f->func();
	m->func();
	//c->func();
	//child.func();
    return 0;
}

对于func函数而言,Father中定义为虚函数,Mather中未定义为虚函数,Child继承了父母。运行结果是Father,Mather也就是说各自调用了各自的函数。

我是这样理解的

对于f->func而言,因为Child未定义,所以就到了父类,而m->func本身和虚函数就没关系

而main中被注释掉的两行是要编译出错的,因为不知道要调用哪一个

扩展一:

如果把Child中的注释打开,运行结果是Child,Mather,这和上面的分析是一致的

扩展二:

如果把Father中func的定义换成纯虚函数,那么Child编译报错,要求必须实现func,这点有些不够智能,毕竟对于java中类似情况就不用再实现了

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值