关于c++继承的一些问题

本文详细介绍了面向对象编程中的继承概念,包括公有、保护和私有继承的访问权限变化,以及继承的兼容性和多继承的二义性问题。重点讨论了虚继承在解决多继承冲突中的作用,强调了静态变量在整个类家族中的共享。同时,探讨了继承如何影响类之间的赋值、指针使用以及同名变量的作用域。
摘要由CSDN通过智能技术生成

继承

​ 继承是面向对象软件技术当中的一个概念,与多态、封装共为面向对象的三个基本特征。继承可以使得子类具有父类的属性和方法或者重新定义、追加属性和方法等。

​ 被继承的类称为基类或者是父类;继承的类被称为子类或者是派生类。

继承方式

​ 继承方式分为三类:公有继承、保护继承、私有继承。三类继承的不同之处,是改变继承成员数据的访问权限

  • 公有继承:原来的成员数据访问权限不变
  • 保护继承:原来成员数据访问权限private不变;public、protected都变为protected。
  • 私有继承:原来成员数据访问权限都变为private
publicprotectedprivate
公有继承(public)publicprotected不可见
保护继承(protected)protectedprotected不可见
私有继承(private)privateprivate不可见

继承兼容性

​ 1.父类不能给子类赋值,子类可以给父类赋值。因为子类比父类空间大,能够填充满父类的空间。

  • 因为子类继承实在父类的空间基础上进行扩展,因此子类的空间包含整个父类的空间,同时可以在此基础上增加新的变量,扩展空间。
    在这里插入图片描述

​ 2.父类指针可以指向子类对象,子类指针不能指向父类对象。因为子类指针指向的空间比父类大,有一些额外的值无法预料。

​ 3.父类和子类可以出现同名的变量,但二者作用域不同

class Parent
{
    int a;//parent::a
};
class Child : public Parent
{
	int a;//child::a
};

​ 4.静态变量整个家族都共用

  • 父类如果有静态变量,则子类继承以后,子类的静态变量与父类一致,整个家族共用一个变量。

多继承

​ 1.多继承会出现两个不明确的变量,解决方法:虚继承,使得最终继承只有一个确定的变量。

​ 如图:
在这里插入图片描述

​ 家具类具有成员数据m,而床类和沙发类同时继承家具类,因此二者都有数据成员m;而此时沙发床通过多继承,继承床类和沙发类,则m拷贝了两份,因此沙发床在调用m的时候具有二义性,无法确定到底是继承谁的m。

解决方法:床类和沙发类在继承家具类的时候采用虚继承的方法,采用虚继承以后,沙发床在继承二者时,发现二者继承了同一份变量便只会拷贝一次。

class Bed : virtual public Furniture
class Sofa : virtual public Furniture
class SofaBed : public Bed,public Sofa
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值