12th week read Program 3: constructor of the virtual base class, 12th week Constructor
Problem and code:
# Include <iostream> using namespace std; class Base {public: Base (char I) {cout <"Base constructor. -- "<I <endl ;}; class Derived1: virtual public Base // virtual Base class {public: Derived1 (char I, char j): Base (I) {cout <"Derived1 constructor. -- "<j <endl ;}; class Derived2: virtual public Base // virtual Base class {public: Derived2 (char I, char j): Base (I) {cout <"Derived2 constructor. -- "<j <endl ;}; class MyDerived: public Derived1, public Derived2 {public: MyDerived (char I, char j, char k, char l, char m, char n, char x): Derived2 (I, j), Derived1 (k, l), Base (m), d (n) {cout <"MyDerived constructor. -- "<x <endl;} private: Base d ;}; int main () {MyDerived obj ('A', 'B', 'C ', 'D', 'E', 'F', 'G');/* execute the MyDerived constructor Derived2 ('A', 'B '), derived1 ('C', 'D'), Base ('E'), D ('F') Because Derived2 ('A', 'B ') and Derived1 ('C', 'D') are virtual Base classes, so the Base constructor is output first by executing the Base constructor. -- E then runs the statements in the constructor of the virtual base class, executes the constructor of Derived1, and outputs the constructor of derived1. -- D then executes the Derived2 constructor and outputs The Derived2 constructor. -- B then, the MyDerived class contains a Base class object. Therefore, execute the Base constructor again and output the Base constructor. -- F is the final statement in the MyDerived constructor <"MyDerived constructor. -- G */return 0 ;}
Running result:
Knowledge Point summary:
Note the above.
Learning Experience:
1. Definition of virtual base class
Class virtual base class name: The base class inherited by virtual public.
2. when a derived class inherits the virtual base class, the constructor first executes the constructor of the original base class, and skips the construction of data members in the base class in the virtual base class, execute your own data constructor.