C++ 继承

文章详细介绍了C++中的类继承方式,包括公有、私有和保护继承,以及它们对成员权限的影响。此外,还讨论了继承的兼容性,如子类对象可以赋值给父类对象,父类引用可以引用子类对象。文章还提到了构造函数和析构函数的执行顺序,以及多继承和虚继承的概念,以避免内存中的重复数据。
摘要由CSDN通过智能技术生成
class Student3 :public Student
{
public:
	Student3(int id, string name, int score) :Student(id, name) //继承父类,并使用父类的构造方法赋值id和name
	{
		this->score = score;
	}

	void printS(){
		Student::printS(); //调用父类的方法
		cout << "score:" << this->score << endl;
	}
private:
}

类的继承方式

类的继承方式分为公有继承、私有继承、保护继承。

publicprotectedprivate
公有继承publicprotected不可见
保护继承protectedprotected不可见
私有继承privateprivate不可见

public表示类成员不仅自己可以用,外部成员也可以访问
protected表示类成员自己可以用,外部不能用
private和protected一样外部不能用,内部可以用

private成员在子类中任然存在,但是无法访问到
protectedh和private的区别只要体现在子类的子类访问上,如果子类protected继承父类,子类中的成员public和protected都变成protected权限了,子类的子类的访问也会受影响

在公有继承下,父类中的公有、私有、保护成员的在子类中的权限不变
在保护继承下,父类中的公有、保护在子类中权限都为保护,私有不可见
在私有继承下,父类中的公有、保护、私有在子类权限都为私有。

继承的兼容

子类对象可以当作父类对象使用

Child c;
Parent p = c; 可以
c.printP(); 可以
p.printC(); 不可以 

子类对象可以直接赋值给父类对象
子类对象可以直接初始化父类对象
父类指针可以直接指向子类对象

Child *cp = NULL;
Parent *pp = NULL;
Child c;
Parent p;
pp = &c; 可以
cp = &p; 不可以,cp获取p以外的元素溢出

父类引用可以直接引用子类对象

继承 构造函数、析构函数

执行子类的构造函数前会先执行父类的构造函数
执行析构函数时,会先调用子类的析构函数

子类父类中出现重名变量

Parent::a 父类a的访问
this->a 子类a的访问

多继承

多继承是指一个子类继承了多个父类的情况,这种情况下,多个父类的属性都会在子类中出现。
虚继承指的是假如两个子类继承了同一个父类,而这两个子类又被下一代子类进行了多继承,那么父类中的变量会在两个子类中出现,也会在下一代子类中出现,这样下一代子类会出现两个来自父类的变量
在这里插入图片描述
这样会开辟两份空间,为了避免这种情况,需要在继承的时候加上virtual。

class Parent{
	int a;
}
class Son :public Parent{
	a 会有继承parent的a
	int b;
} 
class Daughter :public Parent{
	a 会有继承parent的a
	int c;
}
class GrandSon :public Son, Daughter{
	这里会出现两个a
	a,a,b,c;
}

class Parent{
	int a;
}
class Son :virtual public Parent{
	a 会有继承parent的a
	int b;
} 
class Daughter :virtual public Parent{
	a 会有继承parent的a
	int c;
}
class GrandSon :public Son, Daughter{
	只会有一个a
	a,b,c;
}

在这里插入图片描述
这样只会开辟一份空间了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值