zoukankan      html  css  js  c++  java
  • 104.虚基类以及为什么要用虚基类

    • 为什么要用虚基类
    当在多条继承路径上有一个公共的基类,在这些路径中的某几条汇合处,这个公共的基类就会产生多个实例(或多个副本),若只想保存这个基类的一个实例,可以将这个公共基类说明为虚基类。

    代码示例
     1 为什么要用虚基类的原因
     2 #include <iostream>
     3 using namespace std;
     4 class A
     5 {
     6 public:
     7     int a;
     8 public:
     9     A()
    10     {
    11         cout << "A()" << endl;
    12     }
    13     ~A()
    14     {
    15         cout << "~A()" << endl;
    16     }
    17 };
    18 
    19 class B1 : public A
    20 {
    21 
    22 };
    23 
    24 class B2 :public A
    25 {
    26 
    27 };
    28 
    29 class C :public B1, public B2
    30 {
    31 
    32 };
    33 
    34 void main()
    35 {
    36     C c1;
    37     //c1.a = 1;
    38     //特定基类初始化
    39     c1.B1::A::a = 10;
    40     c1.B2::A::a = 100;
    41     cin.get();
    42 }
    • 虚继承以及虚基类
       1 #include <iostream>
       2 using namespace std;
       3 
       4 //虚基类
       5 class A
       6 {
       7 public:
       8     int a;
       9 public:
      10     A()
      11     {
      12         cout << "A()" << endl;
      13     }
      14     ~A()
      15     {
      16         cout << "~A()" << endl;
      17     }
      18 };
      19 
      20 //虚继承节约内存,避免直接保护
      21 class B1 :virtual public A
      22 {
      23 
      24 };
      25 
      26 class B2 :virtual public A
      27 {
      28 
      29 };
      30 
      31 class C :public B1, public B2
      32 {
      33 
      34 };
      35 
      36 void main()
      37 {
      38     C c1;
      39     c1.a = 10;
      40     c1.B1::A::a = 3;
      41     cout << c1.B1::A::a << endl;
      42     cout << c1.B2::A::a << endl;
      43     cin.get();
      44 }
  • 相关阅读:
    活着就是幸福
    ibatis配置log4j输出sql语句等日志信息
    每天记录点点滴滴
    SSH整合 创建SessionFactory
    活着
    最经典的智力题
    struts整合spring整合hibernate
    让MyEclipse里的Tomcat自动reloadable
    明天就会有阳光...
    数据表字段为空时的判断
  • 原文地址:https://www.cnblogs.com/xiaochi/p/8603549.html
Copyright © 2011-2022 走看看