在学习C++的过程中,继承和多态是所有人都绕不过的一个重头戏。这篇博客探讨的都是VS2013下,32位编译系统所产生的结果
目录
一、继承
1、概念
继承(inheritance)这一种机制是面向对象程序设计中,可以使代码复用的一种最重要手段。它可以使程序在保持原有类特性的基础上进行扩展,增加一些其他的功能。在继承中产生的类,我们称为派生类。
例如:对于集成来说,我们可以这样理解。简单的一句话,在现有的基础之上进行开发。就像智能手机,例如小米4,小米5,甚至于iPhone,还有电脑等。它们的每一代都是继承了上一代版本的各种优势,以及较为成熟的一些设计。总不可能,你每一次的产品推出都要从头开始设计,所有的程序,功能,框架都要从头设计?这样做的效率就会十分的低。所以c++产生了这一种机制,从而更快的提高程序员的开发效率。
2、作用
继承的主要作用,本就是实现代码的复用性。在生活中我们会遇见很多这样的情况——重复劳动。就好比三个计算器,都只能实现一类数据的加法。那既然都是加法为什么需要三个计算器呢?因此,就产生了多态的定义。而继承最主要的作用就是实现多态。
3、实现方式
class 派生类名 :继承权限 基类名;
class Base
{
public:
void SetBase(int pri, int pro, int pub)
{
_pri = pri;
_pro = pro;
_pub = pub;
}
void PrintBase()
{
cout << _pri << endl;
cout << _pro << endl;
cout << _pub << endl;
}
private:
int _pri;
protected:
int _pro;
public:
int _pub;
};
class Derived : public Base
{};
int main()
{
// 可以验证:派生类将基类中的成员变量继承到子类中
cout << sizeof(Derived) << endl;//12
// 验证:基类中的成员函数释放被子类继承
Derived d;
d.SetBase(10, 20, 30);
d.PrintBase();
return 0;
}
4、继承权限
继承权限顾名思义,使用什么权限对基类中的成员进行继承
// public继承方式:
class Base
{
public:
void SetBase(int pri, int pro, int pub)
{
_pri = pri;
_pro = pro;
_pub = pub;
}
void PrintBase()
{
cout << _pri << endl;
cout << _pro << endl;
cout << _pub << endl;
}
private:
int _pri;
protected:
int _pro;
public:
int _pub;
};
// 继承权限--public
// 基类中public/protected的成员在子类中权限不变
// 基类中private的成员在子类中不可见(但已被继承)
// 访问权限:限定该成员变量是否可以直接在类外进行调用
class Derived : public Base
{
public:
void SetDerived(int priD, int proD, int pubD)
{
_priD = priD;
_proD = proD;
_pubD = pubD;
_pro = 10;//基类中共有的成员变量在派生类中可以被访问
// _pri = 20; // 在派生类中不能访问基类中private的成员变量
}
publi