class student { public: student(int id,string name) { this->id=id; this->name=name; } private: int id; string name; } class student2:public student { public: student2(int id,string name,int s):student(id,name),score(c){} private: int score; } /*若在主函數中,student s1(20,"lihua"); student2 s2(30,"lijun",90); 此時的s2依然是其初始化的值而不是s1中的數值, 可以這么理解,繼承的僅僅是父類的內存結構 子類依然是子類,父類與子類空間是相互獨立的 */ //公有繼承 class a { public: int item; protected : int j; private: int x;*/ }; class b:public a { public: void show() { cout<<i; //i是基類的公有成員變量,在公有繼承類的【內部、外部】可以訪問 cout<<j; //j是基類的保護成員變量,在公有繼承類的【內部】可以訪問 cout<<x; //x是基類的私有成員變量,在公有繼承類的【內部】不可以訪問 } }; //多繼承(菱形繼承) 一個類可以繼承一個或兩個類 如:class A:public B,public C {}; 若有一個基類 class X: { int m; } 且B、C分別公有繼承X 則 main()中,A.m是錯誤的,因為繼承的B、C都有m,必須指明作用域 A.B::m此時才是正確的 多繼承產生的變量重復多份繼承問題解決辦法:(虛繼承virtual關鍵字) 如上類:class B:virtual public X{}; class C:virtual public X{}; class A:public B,public C{};