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
- C++虚继承研究-1
- Android继承ViewGroup研究(1)
- C++-虚继承
- objective-c 继承1
- C++【多重继承和虚继承】
- (C++)继承、菱形继承和虚继承的那些事儿
- Android 继承ViewGroup研究
- 继承ViewGroup研究
- 继承ViewGroup研究
- C++,继承、虚函数解惑!
- C++,继承、虚函数解惑!
- C++ 虚函数表研究 (一) 单继承
- C++ 虚函数表研究 (二) 多重继承
- 类大小——sizeof 研究(虚继承)
- 继承ViewGroup研究(1)--简介和一个小Demo
- 继承ViewGroup研究(1)--简介和一个小Demo
- C/C++_log2000_继承的练习1
- c继承
- c语言里函数rand()和srand()的用法
- 安装完PHP后,增加扩展模块 phpize
- 两大数相乘 -- javascript 实现
- 浅谈如何减小汽车发动机舱的异常噪声过大
- 一个人的项目组
- C++虚继承研究-1
- poj 1562 (bfs)
- shell脚本时间操作
- CloudStack 4.2安装文档(Agent)
- Jquery Aajx异步提交系列
- Hadoop的实质是什么
- IOS 推送机制详解,兼容IOS8的推送
- 学徒浅析Android开发:第七讲——数据存储之SharedPreferences
- LeetCode: Largest Rectangle in Histogram [084]