目录
继承的使用原因
继承是一个在生活中非常普遍的概念,现实生活中很多的东西都是具有继承性的,基类就是从先辈中得到他们的属性和行为特征,类的继承就是新类从一个已经存在的类中继承他们所有的特性,从另一个角度来说,从已有的类中产生一个新的类的这个过程就叫做类的派生,使用类的派生,我们可以通过增加少量的代码或者修改少量的代码的方法,我们就可以得到一个全新的类从而解决代码重用的问题,关于基类和派生类之间的关系,我们可以简单的表示为,派生类就是基类的一个具体化,而基类则是派生类的一个抽象化
下面来看一个栗子:
#include<iostream> using namespace std; class base { public: void setx(int i) { x = i; } int getx() { return x; } public: int x; }; class derived :public base { public: void sety(int i) { y = i; } int gety() { return y; } void show() { cout << "base::x=" << x << endl; } public: int y; }; int main() { derived b; b.setx(16); b.sety(25); b.show(); cout << "base::x=" << b.x << endl; cout << "derived::y=" << b.y << endl; cout << "base::x=" << b.getx() << endl; cout << "derived::y=" << b.gety() << endl; return 0; }
输出结果:
base::x=16
base::x=16
derived::y=25
base::x=16
derived::y=25
在上面这个栗子中我们创建了两个类base类和derived类其中derived类继承了base类,然后我们通过derived b这个方法定义了一个b的对象,然后我们执行了以下两个方法
b.setx(16), b.sety(25);但是我们从上面代码中我们得知了derived类中是没有setx(16)这个方法的,那么程序会如何执行呢?那么此时程序会自动找基类base类,然后在基类中我们找到了这个方法,所以程序就自动调用这个方法了,所以说派生类是可以继承基类中的属性,这种方法的实现可以大大减少我们代码的重用性
在派生类中可以实现的方法
在派生类中,我们可以增加新的数据成员,也可以增加新的成员函数,同时我们也可以对基类的成员进行重新的定义,最后我们还可以改变基类成员在派生类中的访问属性
基类成员在派生类中的访问属性
在派生类中,他继承了基类中的除了构造函数以及析构函数之类的一切成员,但是这些成员之间的访问属性在派生过程中也是可以随用户而调整的从基类继承过来的成员,同时在派生类中的访问属性就是由它的继承方法所控制的,在派生类中,我们可以根据从基类继承的成员按照访问属性划分为以下4种,一种是不可直接访问,还有两种是公有保护和私有
访问属性规则
从上面的情况我们可以归纳出以下几点基类中的一切私有成员,不管是哪种继承方式,基类中的私有成员都是不允许派生类的成员进行继承的,通俗的来讲,派生类中是不可直接访问基类的私有成员,
对于基类中的公有成员,当我们的继承是公有时基类中的所有公有成员在派生类中都是以公有成员的身份出现的,好当我们的继承式私有时基类中的所有公有成员,在派生类中都是以私有成员的身份出现的,而当我们保护继承的时候,基类中的公有成员在派生类中都是作为保护成员的身份而展示出来的