C++学习 --类和对象之继承

目录

1, 继承的语法

1-1, 继承方式

1-1-1, 公共继承public

1-1-2, 私有继承private

1-1-3, 保护继承protected

2, 父类,子类同名属性处理

2-1, 成员变量同名

2-2, 成员函数同名

3, 多继承

4, 菱形问题


1, 继承的语法

通过class 子类:继承方式 父类, 可实现继承

class A : public B

1-1, 继承方式

继承方式分为, public、private、protected, 通过继承方式可决定继承的属性在子类的权限

1-1-1, 公共继承public

通过public方式继承父类属性与父类保持一致, 即父类public的属性, 子类也是public, 父类protected属性, 子类也是protected属性

class Son1 :public Base1
{
public:
	void func()
	{
		//m_a在父类中是public权限, 所以子类也是public权限, 可修改
		m_a = 100;
		//m_b在父类中是protected权限, 所以子类也是protected权限, 可修改
		m_b = 200;
		//m_c在父类中是private权限, 子类不能访问, 所以不能修改
		m_c = 300;
	}
};

1-1-2, 私有继承private

通过private方式继承父类属性, 在子类中都是private属性

class Son1 :private Base1
{
public:
	void func()
	{
		//m_a在父类中是public权限, 所以子类也是private权限, 可修改
		m_a = 100;
		//m_b在父类中是protected权限, 所以子类也是private权限, 可修改
		m_b = 200;
		//m_c在父类中是private权限, 子类不能访问, 所以不能修改
		m_c = 300;
	}
};

1-1-3, 保护继承protected

通过protected方式继承父类属性, 在子类中都是protected属性

class Son1 :protected Base1
{
public:
	void func()
	{
		//m_a在父类中是public权限, 所以子类也是protected权限, 可修改
		m_a = 100;
		//m_b在父类中是protected权限, 所以子类也是protected权限, 可修改
		m_b = 200;
		//m_c在父类中是private权限, 子类不能访问, 所以不能修改
		m_c = 300;
	}
};

说明:子类都不能访问父类的private权限属性

2, 父类,子类同名属性处理

2-1, 成员变量同名

当子类存在与父类同名的属性时, 通过对象.属性方式, 访问的是子类的属性, 要访问父类的属性, 需通过对象.父类::属性方式进行访问

//Base1是父类名称
cout << "子类属性访问m_a:" << s1.m_a << endl;
cout << "父类属性访问m_a:" << s1.Base1::m_a << endl;

2-2, 成员函数同名

当子类存在与父类同名的属性时, 通过对象.函数()方式, 访问的是子类的属性, 要访问父类的属性, 需通过对象.父类::函数()方式进行访问

//func()是子类父类同名的成员函数, Base1是父类名称
s1.func();
s1.Base1::func();

3, 多继承

通过class 子类:继承方式 父类1, ..., 继承方式, 父类n, 可实现多继承

//Base1, Base2为继承的基类
cout << "访问基类属性:"  << s1.m_a << endl;
cout << "访问Base1属性:" << s1.Base1::m_a << endl;
cout << "访问Base2属性:" << s1.Base2::m_a << endl;

4, 菱形问题

通过虚继承的方式, 可解决菱形问题, 语法为class 子类:virtual 继承方式 父类1, virtual 继承方式 父类2

//加上virtual就表示虚继承, 可解决菱形问题
class C :virtual public A, virtual public B

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值