• 虚拟基类的初始化


    无论虚拟基类出现在继承层次中的哪个位置上,它们都是在非虚拟基类之前被构造

    虚拟基类的初始化成了最末层继承类的责

    namespace Ex18_15
    {
        class Base {
        public:
            Base(){cout << "Base()\n";};
            Base( string ){
                cout << "Base(string)\n";
            };
            Base( const Base&){
                cout << "Base(const Base&)\n";
            };
            // ...
        protected:
            string _name;
        };

        class Derived1 : /*virtual */public Base
        {
        public:
            Derived1(){cout << "Derived1() : Base()\n";}
            Derived1(string s) : Base(s){cout << "Derived1(string) : Base(string)\n";}
            Derived1(const Derived1& d) : Base(d){cout << "Derived1(Derived) : Base(Base)\n";}
        };
    //     
    //     class Derived2 : virtual public Base
    //     {
    //     public:
    //         Derived2(){cout << "Derived2() : Base()\n";};
    //         Derived2(string s) : Base(s){cout << "Derived2(string) : Base(string)\n";}
    //         Derived2(const Derived1& d) : Base(d){cout << "Derived2(Derived) : Base(Base)\n";}
    //     };
        
        class VMI : public Derived1/*, public Derived2*/
        {
        public:
            VMI(){cout << "VMI()\n";}
            //如果初始化列表中没有Base(s)则Base用默认构造函数构造
            VMI(string s) : Derived1(s)/*, Derived2(s),*//*Base(s)*/{
                cout << "VMI(string)\n";
            }
            VMI(const VMI& v) : /*Derived2(v), */Derived1(v)/*,Base(v)*/{
                cout << "VMI(const VMI &)\n";
            }
        };

        class Final : public VMI
        {
        public:
            Final(){cout << "Final()\n";}
            //如果初始化列表中没有Base(s)则Base用默认构造函数构造
            Final(string s) : VMI(s)/*, Base(s)*/{
                cout << "Final(string) \n";
            }
            Final(const Final& f): VMI(f)/*,Base(f)*/{
                cout << "Final(const Final&)\n";
            }
        };

        inline void test()
        {
            Final f;
            cout << endl;
            Final s("s");
            cout << endl;
            Final c(f);
        }
    }

  • 相关阅读:
    [React] Cleaning up Functional Components with Custom Hooks
    [React] useCallback + useMemo to avoid re-render
    [React] Replacing Instance Variables with the useRef Hook
    [Cloud Architect] 4. Introduction to Design for Cost, Performance, & Scalability
    [Cloud Architect] 3. Monitor, React, and Recover
    [Cloud Architect] 3. Business Objectives
    1314:【例3.6】过河卒(Noip2002)
    1313:【例3.5】位数问题
    rk3568 linux sdk Buildroot 开发
    AcWing 873. 欧拉函数
  • 原文地址:https://www.cnblogs.com/lidan/p/2239483.html
Copyright © 2020-2023  润新知