当虚函数遇到多继承

来源:互联网 发布:c语言define怎么用 编辑:程序博客网 时间:2024/06/07 11:07
#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中类似情况就不用再实现了

0 0
原创粉丝点击