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