C++面向对象总结——继承
引言
类是对现实中事物的抽象,类的继承和派生的层次结构则是对自然界中事物分类、分析的过程在程序设计中的体现。
一,如何理解继承?
面向对象程序设计中最重要的一个概念是继承。继承允许我们依据另一个类来定义一个类,这使得创建和维护一个应用程序变得更容易。这样做,也达到了重用代码功能和提高执行效率的效果。
当创建一个类时,您不需要重新编写新的数据成员和成员函数,只需指定新建的类继承了一个已有的类的成员即可。这个已有的类称为基类,新建的类称为派生类。
继承代表了 is a 关系。例如,哺乳动物是动物,狗是哺乳动物,因此,狗是动物,等等。
// 基类 class Animal { // eat() 函数 // sleep() 函数 }; //派生类 class Dog : public Animal { // bark() 函数 };
💙继承类型
一个类可以派生自多个类,这意味着,它可以从多个基类继承数据和函数。定义一个派生类,我们使用一个类派生列表来指定基类。类派生列表以一个或多个基类命名,形式如下:
class 派生类: access-specifier(访问修饰符) 基类
当一个类派生自基类,该基类可以被继承为 public、protected 或 private 几种类型。继承类型是通过上面讲解的访问修饰符 access-specifier 来指定的。
我们几乎不使用 protected 或 private 继承,通常使用 public 继承。当使用不同类型的继承时,遵循以下几个规则:
- 公有继承(public):当一个类派生自公有基类时,基类的公有成员也是派生类的公有成员,基类的保护成员也是派生类的保护成员,基类的私有成员不能直接被派生类访问,但是可以通过调用基类的公有和保护成员来访问。
- 保护继承(protected): 当一个类派生自保护基类时,基类的公有和保护成员将成为派生类的保护成员。
- 私有继承(private):当一个类派生自私有基类时,基类的公有和保护成员将成为派生类的私有成员。
💛实例演示
#include <iostream> using namespace std; // 基类 class Shape { public: void setWidth(int w) { width = w; } void setHeight(int h) { height = h; } protected: int width; int height; }; // 派生类 class Rectangle : public Shape { public: int getArea() { return (width * height); } }; int main(void) { Rectangle Rect; Rect.setWidth(5); Rect.setHeight(7); // 输出对象的面积 cout << "Total area: " << Rect.getArea() << endl; return 0; }
🧡访问控制和继承
派生类可以访问基类中所有的非私有成员。因此基类成员如果不想被派生类的成员函数访问,则应在基类中声明为 private。
我们可以根据访问权限总结出不同的访问类型,如下所示(访问基类的成员):
一个派生类继承了所有的基类方法,但下列情况除外:
- 基类的构造函数、析构函数和拷贝构造函数。
- 基类的重载运算符。
- 基类的友元函数。
💜多重继承
一个派生类不仅可以从一个基类派生,也可以从多个基类中派生。一个派生类有两个或多个基类的称为多个基类能够多重继承(multiple inheritance)。
C++ 类可以从多个类继承成员,语法如下(继承了两个基类):
// 派生类 class Rectangle: public Shape, public PaintCost { public: int getArea() { return (width * height); } };
需要注意的是(使用继承容易犯的错误):
如果写了一个CMan类代表男人,后来又发现需要一个CWoman类来代表女人,仅仅因为CWoman类和CMan类有共同之处,就让CWoman类从CMan类派生而来,是不合理的。因为“一个女人也是一个男人”从逻辑上不成立。
参考博文:C++ 继承和派生介绍 - 王陸 - 博客园 (cnblogs.com)
- C++总结之继承和面向对象的设计
- 【c++】面向对象程序设计之访问控制与继承
- C++面向对象总结
- c++面向对象语法总结
- 面向对象继承总结:拷贝继承、类式继承和原型继承
- C++面向对象总结——重载运算符和重载函数
- C++面向对象笔记:继承、派生
- C++面向对象部分内容总结
- C++面向对象的程序设计——继承
- C++ Pirmer : 第十五章 : 面向对象程序设计之基类和派生的定义、类型转换与继承与虚函数
- 黑马程序员_java面向对象总结【3】(继承、接口和多态)
- C++面向对象总结——多态
- c++基础 之 面向对象特征一 : 继承
- C++面向对象学习:继承自string的MyString
- C++面向对象总结——数据抽象与数据封装
- C++内容总结--面向对象语言特点
- C++ — 面向对象之继承的详细讲解
- C#基础总结之八面向对象知识点总结-继承与多态-接口
- c++面向对象基础学习自我总结
- c++面向对象之继承