c++6之继承

发布于:2023-01-04 ⋅ 阅读:(319) ⋅ 点赞:(0)

6.继承

针对类的代码复用技术

class Son:public Richfather //(公有继承)

{

}

6.1继承的权限问题

类的访问权限(用类定义对象,对象访问数据)

1.public : 外部访问权限

2.protected: 内部访问权限

3.private: 内部访问权限

继承的权限

1.公有继承(public )

2.保护继承(protected)

3.私有继承(private)

6.2构造析构函数执行顺序

基类构造-->子类构造-->子类析构-->基类析构

父类给子类传参

B(int n=20):A(n)//给A类的构造函数传参

6.3多继承

c++允许多继承

class Son:public Richfather,public Richmother //多继承

{

}

当 多个继承方有相同内容时

s.Richfather::money();//用作用域访问符

s.Richmather::money();

注意菱形继承问题,注意避免冲突,所继承的两个父类都继承自同一个父类,这样两个父类会有同一个变量,难以区分

6.4继承与组合

is -a关系:继承

has -a关系:组合

(1)看有没有基类

(2)反过来确认

1.苹果类 香蕉类 水果类 --is -a继承

苹果是水果,香蕉是水果

2.苹果类 草莓类 午餐类 --has -a组合(不确定)

3.发动机 车架 车轮 变速器 汽车--has-a组合

发动机不是汽车,车轮,车架不是汽车

class Car //组合

{

public: Engine e;

//各个类 Frame f;

Wheel w[4];

Speed s;

};

6.5作业

1.继承的权限

2.为什么要引入protected

3.对时钟类,进行升级,设计新时钟类。在原来的基础上增加年月日,具有原本的功能。

1.

struct默认公有权限,class 默认私有权限

struct A{}; class A{}; class B : A{};//默认私有继承 struct B : A{};//默认公有继承

以派生类的默认权限作为继承权限

内部访问:在类内部定义类函数等操作,访问类的属性或者方法叫做内部访问。 外部访问:在类的外部,比如创建了一个类实例对象,通过点.操作符或者->操作符来访问类数据或方法,叫做外部访问。

在C++中,继承权限与访问权限一样,都有三种:public、protected、private。 在三种访问权限(不牵扯到继承与友元)中,声明为public的属性与方法,内部与外部均可访问到;proteced与private只能在其内部访问。按照保护程度来排序,应为:private>protected>public

公共权限 public 成员:

类内可以访问,类外可以访问 任何一种继承,子类可以访问父类的公共成员

保护权限 protected 成员:

类内可以访问,类外不可以访问 任何一种继承,子类可以访问父类的保护成员

私有权限 private 成员:

类内可以访问,类外不可以访问。 任何一种继承,子类不可以访问父类的私有成员

使用类成员时,只要清楚是在用什么权限的成员以及是在类内用还是在类外用,就一定不会出错

在继承时,若继承权限的保护程度高于访问权限,那么继承权限会将访问权限覆盖,比如private继承时,基类中public与protected的权限,在子类中均为private访问权限;若低于或者相等,则不变。需要注意的是,继承并不是将属性与方法改一下权限然后全扔到子类里面,而是还加上了父类的访问权限,如父类的private属性方法,是只能在父类内部访问的,无论以何种继承,是无法在子类中直接访问的(但可间接访问)。

 2.

C++的最大特点就是封装、继承和多态,封装也就是外界无法直接访问private和protected成员,只给外界留出了public接口,借由public接口来访问private和proteced成员,用以限制外部访问,就好像你只需要一个遥控器就能控制整个空调的开关,温度的升降而不用去管其内部细节。

而protected存在的意义是当我不想向外部暴露某个函数或者成员变量,但是我又想让派生类知道和访问这个成员,就将其用protected标志。

private继承之后的权限都会变成private,无法调用其内的成员变量,成员函数。而protected的保护继承之后的public权限会变为protected,可以从外部访问成员函数,从而间接访问私有成员

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到