c++-------继承

继承

语法: class 子类(派生类) : 继承方式 父类(基类)

三种继承方式

  • 公共继承
  • 保护继承
  • 私有继承
    三种继承
    公共继承:
    父类中的公共权限成员 到 子类中依旧是公共权限,父类中保护权限成员到子类中依然是保护权限,父类中私有权限成员到子类中访问不到.
    保护继承:
    父类中的公共权限成员 到 子类中是保护权限,父类中保护权限成员到子类中依然是保护权限,父类中私有权限成员到子类中访问不到
    私有继承:
    父类中公共成员 保护成员到子类中变成私有成员,类外访问不到,父类中私有成员,子类访问不到.

继承中的对象模型

问题:从父类继承过来的成员,哪些属于子类对象?

class base
{
public:
	int ma;
protected:
	int mb;
private:
	int mc; //私有成员只是被隐藏了,但是还是会继承下去 
};

//公共继承
class son: public base
{
public : 
	int md; 
	 
} ;

void test01()
{
	// 4?  12 ?  16?
	cout << "sizeof son =" << sizeof(son) << endl;   //16
	//父类中所有非静态成员属性都会被子类继承下去,父类中私有属性是被编译器隐藏,访问不到,但是依旧被继承.
} 

int main()
{
	test01(); 
} 

继承中构造和析构的顺序

问题: 父类和子类的构造和析构顺序谁先谁后?
先构造父类,再构造子类;析构的顺序与构造的顺序相反.

同名成员处理方式

问题:当子类对象与父类出现同名函数,如何通过子类对象,访问到子类或者父类中同名的数据呢?
同名成员属性处理

  • 访问子类同名成员 直接访问即可; son.ma;
  • 访问父类中同名对象 需要加作用域; s.base::ma;
    同名成员函数处理
    同理,s.func();
    s. base.func();

同名静态成员处理方式

问题: 继承中同名的静态成员在子类对象上如何进行访问?
静态成员和非静态成员出现同名,处理方法一致.

同名静态成员属性
1.通过对象访问
s.ma;
s.base::ma;
2.通过类名访问
son::ma;
son::base::ma; // 第一个::代表通过类名方式访问 第二个::代表访问父类作用域下

同名静态成员函数
1.通过对象访问
s.func();
s.base::func();
2.通过类名访问
son::func();
son :: base::func();

多继承语法

子类需要继承base1 和 base2
class son : public base1, public base2

当父类中出现同名成员,需要加作用域区分
s.base1::ma
s.base2::ma

菱形继承

概念:
两个派生类继承同一个基类
又有某个类同时继承这两个派生类

利用虚继承解决

//动物类  虚基类 
class animal
{
	public:
	 int mage; 
} 
// 羊类 

class sheep: virtual public animal (); 

//驼类
class tuo : virtual public animal(); 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值