发现这个月准备竞赛完全没有更新哎。。。

改了下某华大一c++测试题。。。网上对虚继承讲的要么太繁琐要么不到位,自力更生

 #include<iostream>
#include<fstream>
using namespace std;
class A
{
public:
A(int i) {
a = i;
cout << "a=" << a << endl;
}
~A() { cout << "A's destructor " << a << endl; }
int a;
};
class B : virtual public A
{
public:
B(int i, int j) : A(i) { cout << "B:" << j << endl;
cout << "virtual A:" << a << endl;
}
}; class C : virtual public A
{
public:
C(int i, int j) : A(i)
{
cout << "C:" << i + j << endl;
}
};
class D : public B, public C
{
public:
D(int k1, int k2, int k3, int k4) : B(k1, k2), C(k4, k3), A()
{
cout << "D:" << k4 << endl;
}
};
void main()
{
D d(, , , );
A a();
a = A();
cout << "a.a=" << a.a << endl;
cout << "d.a=" << d.a << endl;
}

我们可以看出,通过虚继承方式的派生类并不调用基类的构造函数。

 #include<iostream>
#include<fstream>
using namespace std;
class A
{
public:
A(int i) {
a = i;
cout << "a=" << a << endl;
}
~A() { cout << "A's destructor " << a << endl; }
int a;
};
class B : public A
{
public:
B(int i, int j) : A(i) { cout << "B:" << j << endl;
//cout << "virtual A:" << a << endl;
}
}; class C : public A
{
public:
C(int i, int j) : A(i)
{
cout << "C:" << i + j << endl;
}
};
class D : public B, public C
{
public:
D(int k1, int k2, int k3, int k4) : B(k1, k2), C(k4, k3) //A(k1)
{
cout << "D:" << k4 << endl;
}
};
void main()
{
D d(, , , );
A a();
a = A();
cout << "a.a=" << a.a << endl;
//cout << "d.a=" << d.a << endl;
}

当我们注释掉B,C对A的virtual继承方式后,由于派生类不允许访问间非虚拟接继承的基础类,程序会报错。

然后我对程序又做了注释改动,可以看出,此时D继承了B,C,B,C又都继承了A,也就是说B,C间接地继承了两次A。我们的程序比较简单都是普通变量,要是复杂一点(来点指针,引用动态分配的数据成员什么的)就麻烦了。

虚继承的B,C对A没什么作用,只是为了在D中不重复继承,到D中才真正有了A的继承

最新文章

  1. ESLint的使用笔记
  2. 关于mybatis中mapper.xmlSQL语句书写的心得
  3. addrinfo 结构
  4. Codeforces Round #282 Div.1 B Obsessive String --DP
  5. SGU 183 Painting the balls (优化的动态规划)
  6. backBarButtonItem 颜色/文字修改
  7. WPS目录制作方法
  8. asp.net mvc 两级分类联动方法示例
  9. MyEclipse中web服务器的三种配置方式
  10. Thinkphp Ajax传地址
  11. CodeForces 484B Maximum Value
  12. js修改title
  13. MySQL密码重置(root用户)
  14. baidu地图:实现多点连线渲染
  15. js变量的一点认识
  16. Visual Studio 统计代码行数
  17. kubernetes微服务部署
  18. JAVA随笔(一)
  19. PHP 笔记——操作MySQL数据库
  20. uitabbar 标题设置 button text attributes only respected for UIControlStateNormal

热门文章

  1. xhtmlConformance与xhtml脚本呈现
  2. SQL存储过程分页(通用的拼接SQL语句思路实现)
  3. 背水一战 Windows 10 (31) - 控件(按钮类): ButtonBase, Button, HyperlinkButton, RepeatButton, ToggleButton, AppBarButton, AppBarToggleButton
  4. JavaScript利用装饰模拟实现私有状态
  5. 玩转 H5 下拉上滑动效果
  6. jQuery弹出关闭遮罩层
  7. 深入浅出node(3) 异步I/O
  8. Group-buy项目总结
  9. tomcat远程调试javaweb
  10. JavaScript中this指向的简单理解