<small id='JCUNX'></small><noframes id='JCUNX'>

  • <tfoot id='JCUNX'></tfoot>

        <bdo id='JCUNX'></bdo><ul id='JCUNX'></ul>

      <legend id='JCUNX'><style id='JCUNX'><dir id='JCUNX'><q id='JCUNX'></q></dir></style></legend>

        <i id='JCUNX'><tr id='JCUNX'><dt id='JCUNX'><q id='JCUNX'><span id='JCUNX'><b id='JCUNX'><form id='JCUNX'><ins id='JCUNX'></ins><ul id='JCUNX'></ul><sub id='JCUNX'></sub></form><legend id='JCUNX'></legend><bdo id='JCUNX'><pre id='JCUNX'><center id='JCUNX'></center></pre></bdo></b><th id='JCUNX'></th></span></q></dt></tr></i><div id='JCUNX'><tfoot id='JCUNX'></tfoot><dl id='JCUNX'><fieldset id='JCUNX'></fieldset></dl></div>

        为什么虚拟基类必须由最派生的类构造?

        时间:2023-08-02

          <legend id='tuf87'><style id='tuf87'><dir id='tuf87'><q id='tuf87'></q></dir></style></legend>
            <bdo id='tuf87'></bdo><ul id='tuf87'></ul>
              <tbody id='tuf87'></tbody>

              <small id='tuf87'></small><noframes id='tuf87'>

            1. <tfoot id='tuf87'></tfoot>
              • <i id='tuf87'><tr id='tuf87'><dt id='tuf87'><q id='tuf87'><span id='tuf87'><b id='tuf87'><form id='tuf87'><ins id='tuf87'></ins><ul id='tuf87'></ul><sub id='tuf87'></sub></form><legend id='tuf87'></legend><bdo id='tuf87'><pre id='tuf87'><center id='tuf87'></center></pre></bdo></b><th id='tuf87'></th></span></q></dt></tr></i><div id='tuf87'><tfoot id='tuf87'></tfoot><dl id='tuf87'><fieldset id='tuf87'></fieldset></dl></div>
                • 本文介绍了为什么虚拟基类必须由最派生的类构造?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

                  问题描述

                  以下代码无法编译:

                  class A {
                  public:
                      A(int) {}
                  };
                  
                  class B: virtual public A {
                  public:
                      B(): A(0) {}
                  };
                  
                  // most derived class
                  class C: public B {
                  public:
                      C() {} // wrong!!!
                  };
                  

                  如果我在C的构造函数初始化列表中调用A的构造函数,即:

                  If I call A's constructor in C's constructor initialization list, that is:

                  // most derived class
                  class C: public B {
                  public:
                      C(): A(0) {} // OK!!!
                  };
                  

                  确实有效.

                  显然,这是因为虚拟基类必须始终由大多数派生类构建.

                  Apparently, the reason is because virtual base classes must always be constructed by the most derived classes.

                  我不明白这个限制背后的原因.

                  I don't understand the reason behind this limitation.

                  推荐答案

                  因为它避免了这个:

                  class A {
                  public:
                      A(int) {}
                  };
                  
                  class B0: virtual public A {
                  public:
                      B0(): A(0) {}
                  };
                  
                  class B1: virtual public A {
                  public:
                      B1(): A(1) {}
                  };
                  
                  class C: public B0, public B1 {
                  public:
                      C() {} // How is A constructed? A(0) from B0 or A(1) from B1?
                  };
                  

                  这篇关于为什么虚拟基类必须由最派生的类构造?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!

                  上一篇:C++ 中隐藏特定函数的方法 下一篇:何时使用 C++ 私有继承而不是组合?

                  相关文章

                  最新文章

                • <legend id='qRlUB'><style id='qRlUB'><dir id='qRlUB'><q id='qRlUB'></q></dir></style></legend>

                  <small id='qRlUB'></small><noframes id='qRlUB'>

                      • <bdo id='qRlUB'></bdo><ul id='qRlUB'></ul>
                      <i id='qRlUB'><tr id='qRlUB'><dt id='qRlUB'><q id='qRlUB'><span id='qRlUB'><b id='qRlUB'><form id='qRlUB'><ins id='qRlUB'></ins><ul id='qRlUB'></ul><sub id='qRlUB'></sub></form><legend id='qRlUB'></legend><bdo id='qRlUB'><pre id='qRlUB'><center id='qRlUB'></center></pre></bdo></b><th id='qRlUB'></th></span></q></dt></tr></i><div id='qRlUB'><tfoot id='qRlUB'></tfoot><dl id='qRlUB'><fieldset id='qRlUB'></fieldset></dl></div>

                      <tfoot id='qRlUB'></tfoot>