文章目录
1、继承
1.1继承的本质和原理
1、继承的本质
在讲述继承的本质之前我们首先来了解一下,什么是基类和派生类,什么是派生什么是继承呢?具体的下面这张图就可以很好的解释。
有了对继承和派生之间关系的了解,我们就可以很轻松的知道1、 继承的本质就是代码复用
1.2继承方式
派生类继承基类有三种继承方式如下:
Public
:如果访问限制是public,表示可以在任意位置访问该访问该限定符下的元素protected
:如果访问限制是protected,表示可以在本类和子类类中访问该限定符下的元素Private:
:如果访问限制是Private:,表示只能在本类类中访问该限定符下的元素
基类中不同访问限定符下的成员,以不同的继承方式继承,在派生类中的访问限定有如下图所示的对应方式:
我们可以有以下总结:
- 外部只能访问对象public的成员,protected和private的成员无法直接访问
- protected和private的区别:在基类中,定义的成员,想被派生类访问但是不想被外部访问,那么在基类中,把相关成员定义成protected,如果派生类和外部都不打算访问,那么在基类中,就把相关成员定义成private私有的
- 在继承结构中,派生类从基类可以继承过来private的成员,但是派生类却无法直接访问
默认的继承方式:
struct定义派生类,默认继承方式就是private私有的,class定义派生类,默认继承方式就是public共有的
2、派生
2.1派生的内存布局和继承元素
1、内存布局
在派生类布局里面基类的布局应该是优于派生类的。具体的我们在下面这段代码画出派生类的内存布局。
class A
{
public:
int ma;
protected:
int mb;
private:
int mc;//只有自己或者友元能访问私有的成员
};
class B : A
{
public:
int md;
void fun()
{
cout << ma << endl;
}
protected:
int me;
private:
int mf;
};
用继承的方式复用A(基类、父类)里面的ma,mb,mc。继承的过程还附带了作用域。
2、派生类继承基类的元素
- 成员变量、静态的成员变量
- 成员方法、静态的成员方法
【注意!!】
构造、析构函数不能继承的!!