第43课 继承的概念和意义

面向对象的高端课程都是和继承相关的,例如设计模式。

思考:

类与类之间是否存在直接的关联关系?

生活中的例子:

组合关系的程序描述:

 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 }

运行结果如下:

组合关系的特点:

实际工程中先考虑组合关系。组合关系能满足需求就用组合关系。

继承关系:

示例:

子类继承了父类的mv和其他成员函数,所以打印出100。

子类不但可以继承父类的代码,而且还可以添加新代码,继承还有另一个层面的意义,那就是代码复用,如下:

C语言使用已经存在的代码只能复制粘贴,C++则可以通过继承。

完成的程序如下:

 1 #include <iostream>
 2 #include <string>
 3
 4 using namespace std;
 5
 6 class Parent
 7 {
 8     int mv;
 9 public:
10     Parent()
11     {
12         cout << "Parent()" << endl;
13         mv = 100;
14     }
15     void method()
16     {
17         cout << "mv = " << mv << endl;
18     }
19 };
20
21 class Child : public Parent
22 {
23 public:
24     void hello()
25     {
26         cout << "I‘m Child calss!" << endl;
27     }
28 };
29
30 int main()
31 {
32     Child c;
33
34     c.hello();
35     c.method();
36
37     return 0;
38 }

重要规则:

示例程序:

Child对象可以直接当做Parent对象使用的。

继承的意义:

继承示例:

  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 class HPBook : public Computer
 84 {
 85     string mOS;
 86 public:
 87     HPBook()
 88     {
 89         mOS = "Windows 8";
 90     }
 91     void install(string os)
 92     {
 93         mOS = os;
 94     }
 95     void OS()
 96     {
 97         cout << mOS << endl;
 98     }
 99 };
100
101 class MacBook : public Computer
102 {
103 public:
104     void OS()
105     {
106         cout << "Mac OS" << endl;
107     }
108 };
109
110 int main()
111 {
112     HPBook hp;
113
114     hp.power();
115     hp.install("Ubuntu 16.04 LTS");
116     hp.OS();
117
118     cout << endl;
119
120     MacBook mac;
121
122     mac.OS();
123
124     return 0;
125 }

运行结果如下:

小结:

原文地址:https://www.cnblogs.com/wanmeishenghuo/p/9574350.html

时间: 2024-12-22 01:30:04

第43课 继承的概念和意义的相关文章

第43课 继承的概念及意义

1. 类之间的组合关系 (1)组合关系:整体与部分的关系 [实例分析]组合关系的描述 #include <iostream> using namespace std; //内存类 class Memory { public: Memory() { cout << "Memory()" << endl; } ~Memory() { cout << "~Memory()" << endl; } }; //硬盘类

C++--继承的概念和意义、继承中的访问级别、不同的继承方式

一.继承的概念和意义 Q:类之间是否存在直接的关联关系?由这个问题由此联想到生活中的例子:组合A.组合关系:整体与部分的关系组合关系的描述--代码示例 #include <iostream> #include <string> using namespace std; class Memory { public: Memory() { cout << "Memory()" << endl; } ~Memory() { cout <&

第49课 多态的概念和意义

1. 函数重写回顾 (1)父类中被重写的函数依然会继承给子类 (2)子类中重写的函数将覆盖父类中的函数 (3)通过作用域分辨符(::)可以访问到父类中的函数 Child c; Parent* p = &c; c.Parent::print(); //从父类中继承 c.print(); //在子类中重写 p->print(); //父类中定义 2. 面向对象中期望的行为 (1)根据实际的对象类型判断如何调用重写函数 (2)父类指针(引用) ①指向父类对象时,则调用父类中定义的函数 ②指向子类对

继承的概念和意义

类和类之间的关联关系 组合关系:整体与部分的关系 继承关系(父子关系) 组合关系的特点 将其它类的对象作为类的成员使用 当前类的对象与成员对象的生命期相同 成员对象在用法上与普通对象完全一致 面向对象中的继承指类之间的父子关系 子类拥有父类的所有属性和行为 子类就是一种特殊的父类 子类对象可以当作父类对象使用 子类中可以添加父类没有的方法和属性 C++中通过下面的方式描述继承关系 1 class Parent 2 { 3 int mv; 4 public: 5 void method(); 6

重载模块概念及意义

# -*- coding: utf-8 -*- #python 27 #xiaodeng #重载模块概念及意义 #正如我们所看见的那样,模块程序代码默认只对每一个过程执行一次,要强制使模块代码重新载入并重新运行,你需可以要求python #这么做,也就是调用reload内置函数. #导入模块只会在第一次被导入时,加载和执行该模块中的代码 #之后导入只会使用已加载的模块对象,而不会重新加载执行文件中的代码 #reload函数会强制已加载的模块的代码重新载入并重新运行.此文件中心的代码的赋值语句会在

继承的概念

1.继承的概念 1.多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可. 2.多个类可以称为子类,单独这个类称为父类或者超类. 3.子类可以直接访问父类中的非私有的属性和行为. 4.通过 extends 关键字让类与类之间产生继承关系. class SubDemo extends Demo{} 2.继承的好处: 1.继承的出现提高了代码的复用性. 2.继承的出现让类与类之间产生了关系,提供了多态的前提. 3.继承的特点 1.Java

Java知多少(27)继承的概念与实现

继承是类与类之间的关系,是一个很简单很直观的概念,与现实世界中的继承(例如儿子继承父亲财产)类似. 继承可以理解为一个类从另一个类获取方法和属性的过程.如果类B继承于类A,那么B就拥有A的方法和属性. 继承使用 extends 关键字. 例如我们已经定义了一个类 People: 1 class People{ 2 String name; 3 int age; 4 int height; 5 6 void say(){ 7 System.out.println("我的名字是 " + n

Review的概念与意义

是什么让Google的程序如此优秀 让Google的程序如此优秀的一个最重要的事情看起来是非常的简单:代码审查 在Google,没有程序,任何产品.任何项目的程序代码,可以在没有经过有效的代码审查前提交到代码库里. 从代码审查里能得到什么? •在代码提交前,用第二群眼睛检查一遍,防止bug混入.这是最常见的理解,也是它最不重要的一点. •代码审查的最大的功用是纯社会性的.如果你在编程,而且知道将会有同事检查你的代码,你编程态度就完全不一样了.你写出的代码将更加整洁,有更好的注释,更好的程序结构—

C++--模板的概念和意义、深入理解函数模板、类模板的概念和意义

一.模板的概念与意义 Q:C++中有几种交换变量的方法?定义宏代码与定义函数A.定义宏代码优点:代码复用,适合所有的类型缺点:编译器不知道宏的存在,缺少类型检查B.定义函数优点:真正的函数调用,编译器对类型进行检查缺点:根据类型重复定义函数,无法代码复用 C.泛型编程--不考虑具体数据类型的编程方式Swap泛型写法中的T不是一个具体的数据类型,而是泛指任意的数据类型C++中的泛型编程函数模板--一种特殊的函数可用不同类型进行调用,看起来和普通函数很相似,区别是类型可被参数化函数模板的语法规则1.