C++-------繼承問題以及多繼承virtual的用法


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{};

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM