1,继承在面向对象中具有举足轻重的地位,面向对象当中的很多高级技术都和继承是息息相关的,比如面向对象的高端课程《设计模式》中的每一种技术都和继承有关,因此我们非常有必要在学习 C++ 时,把继承好好的掌握;通过生活中的例子,来入手面向对象中的概念,绝对是一个很好的选择,因为面向对象理 论起源于生活;
2,生活中的继承是一种关系,发生在两个实体之间,最直接的例子是儿子继承了父亲的一切东西,包括长相、性格,龙生龙指的是特征的继承,这说明了日常生活中继承包含的第一个层面的意思就是特征上面的获取,老鼠儿子会打洞指的是行为的继承,这说明了日常生活中继承包含的第二个层面的意思就是行为上面的获取;综上所述,生活中的继承指的是特征和行为的获取;
3,面向对象中的继承类推生活中的继承也应该是一种关系;
4,思考:
1,类之间是否存在直接的关联关系?
1,面向对象中的实体只有类和对象,对象是用类来创建的,所以我们有必要考虑类之间是否有关联关系,如果类之间没有关联关系,则类的继承无从谈起;
5,组合关系:整体与部分的关系:
6,组合关系的描述实例分析:
1,代码示例:
1 #include <iostream> 2 #include <string> 3 4 using namespace std; 5 6 class Memory 7 { 8 public: 9 Memory() 10 { 11 cout << "Memory()" << endl; 12 } 13 ~Memory() 14 { 15 cout << "~Memory()" << endl; 16 } 17 }; 18 19 class Disk 20 { 21 public: 22 Disk() 23 { 24 cout << "Disk()" << endl; 25 } 26 ~Disk() 27 { 28 cout << "~Disk()" << endl; 29 } 30 }; 31 32 class CPU 33 { 34 public: 35 CPU() 36 { 37 cout << "CPU()" << endl; 38 } 39 ~CPU() 40 { 41 cout << "~CPU()" << endl; 42 } 43 }; 44 45 class MainBoard 46 { 47 public: 48 MainBoard() 49 { 50 cout << "MainBoard()" << endl; 51 } 52 ~MainBoard() 53 { 54 cout << "~MainBoard()" << endl; 55 } 56 }; 57 58 class Computer // 这个地方不仅描述了事物,也还描述了关系,里面只要有一个类不存在,电脑这个类也就不复存在了; 59 { 60 Memory mMem; 61 Disk mDisk; 62 CPU mCPU; 63 MainBoard mMainBoard; 64 public: 65 Computer() // 这里会先调用类成员的构造函数,之后调用电脑类的构造函数,这说明了组合关系;电脑类对象的创建,要依赖上述四个类的对象的创建; 66 { 67 cout << "Computer()" << endl; 68 } 69 void power() 70 { 71 cout << "power()" << endl; 72 } 73 void reset() 74 { 75 cout << "reset()" << endl; 76 } 77 ~Computer() // 电脑类析构的时候,也会将对应的类成员析构,这说明同生死;说明了电脑类对象的存在完全依赖于类成员对象的存在; 78 { 79 cout << "~Computer()" << endl; 80 } 81 }; 82 83 int main() 84 { 85 Computer c; 86 87 return 0; 88 }
1,这里各个类没有实现具体的功能,但是这里主要是用类描述了一种生活当中 整体和部分的关系;
2,面向对象的强大主要在于它直接的描述生活里面的例子,不需要建模了,生活当中什么样子,程序就是什么样子,这样很容易帮助我们开发者找到一种解决方案,面向对象程序设计理论简化了我们当今的软件开发,就目前而言的话,几乎所有的大型软件都是通过面向对象的这门理论支撑而开发的得到的,虽然说有些软件是用 C 语言写的,但是这门理论依然支撑着整个软件的生命期,所以说学习 C++ 不仅仅是学习语法,还要学习面向对象的编程思想,这个例子很好的表现了这一点;
3,这个例子向我们展示了如何用代码展示组合关系,虽然这个代码简单,但是后面的项目当中会经常使用这个技术;
7,组合关系的特点:
1,将其它类的对象作为当前类的成员使用;‘
1,成员变量升级了,成员变量不再是基本类型的变量,成员变量升级为其它类的对象;
2,但是这样的话,类成员的成员变量和成员函数是一个什么样的存储状态,这个还有待深刻研究;
2,成员对象的生命周期与当前类的对象相同;
1,整体与部分的关系,如果部分出了问题,整体也一定出了问题,如车的车轮、电脑的内存;
3,成员对象在用法上与普通对象完全一致;
1,组合关系是面向对象理论当中最简单的一种关系;
8,分析继承关系前分析组合关系的原