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