C++虚继承研究-1

来源:互联网 发布:玩客云 淘宝众筹 编辑:程序博客网 时间:2024/06/08 19:15
#include <iostream>using namespace std;class A {public:virtual ~A(){}virtual void funca() = 0;};class As: virtual public A{public:As(){}virtual ~As(){}virtual void funca(){}};class Ap :virtual public A {public:virtual ~Ap(){}virtual void funcap() = 0;};class B1: public As, virtual public Ap{public:virtual ~B1(){}virtual void funcap(){}};class B2: virtual public Ap{public:virtual ~B2(){}virtual void funcb2() = 0;};class APP:public B2,B1 {public:APP(){}virtual ~APP(){}virtual void funcb2() {}};int main() {APP* ap = new APP();ap->funca();return -1;}



编译结果:

Compiling...ad.cppD:\Program Files\Microsoft Visual Studio\MyProjects\adadfasd\ad.cpp(41) : warning C4250: 'B1' : inherits 'As::funca' via dominance        D:\Program Files\Microsoft Visual Studio\MyProjects\adadfasd\ad.cpp(19) : see declaration of 'funca'D:\Program Files\Microsoft Visual Studio\MyProjects\adadfasd\ad.cpp(59) : warning C4250: 'APP' : inherits 'As::funca' via dominance        D:\Program Files\Microsoft Visual Studio\MyProjects\adadfasd\ad.cpp(19) : see declaration of 'funca'D:\Program Files\Microsoft Visual Studio\MyProjects\adadfasd\ad.cpp(59) : warning C4250: 'APP' : inherits 'B1::funcap' via dominance        D:\Program Files\Microsoft Visual Studio\MyProjects\adadfasd\ad.cpp(39) : see declaration of 'funcap'D:\Program Files\Microsoft Visual Studio\MyProjects\adadfasd\ad.cpp(64) : error C2247: 'funca' not accessible because 'B1' uses 'public' to inherit from 'As'        D:\Program Files\Microsoft Visual Studio\MyProjects\adadfasd\ad.cpp(19) : see declaration of 'funca'执行 cl.exe 时出错.ad.obj - 1 error(s), 0 warning(s)

将上面APP的继承顺序换一下就没问题了:

class APP:public B1,B2 

Compiling...ad.cppD:\Program Files\Microsoft Visual Studio\MyProjects\adadfasd\ad.cpp(41) : warning C4250: 'B1' : inherits 'As::funca' via dominance        D:\Program Files\Microsoft Visual Studio\MyProjects\adadfasd\ad.cpp(19) : see declaration of 'funca'D:\Program Files\Microsoft Visual Studio\MyProjects\adadfasd\ad.cpp(59) : warning C4250: 'APP' : inherits 'As::funca' via dominance        D:\Program Files\Microsoft Visual Studio\MyProjects\adadfasd\ad.cpp(19) : see declaration of 'funca'D:\Program Files\Microsoft Visual Studio\MyProjects\adadfasd\ad.cpp(59) : warning C4250: 'APP' : inherits 'B1::funcap' via dominance        D:\Program Files\Microsoft Visual Studio\MyProjects\adadfasd\ad.cpp(39) : see declaration of 'funcap'ad.obj - 0 error(s), 0 warning(s)


具体原因 继续调查

0 0
原创粉丝点击