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

 

posted @ 2019-06-08 16:23  LBC不认输  阅读(1058)  评论(0编辑  收藏  举报