因:
1,类之间的两种关系为组合和继承,先讲组合是想论述类之间是真的可以存在关系的,存在了组合关系,也就可以存在继承关系;
2,讲组合关系也是因为在实际的软件开发过程当中,发现很多开发者不会正确的使用继承,往往该用组合关系的地方,他们用的是继承关系,而组合关系对应的是最简单的类之间的关系,也就对应着最简单的代码,我们的整个软件本来就已经很复杂了,我们能简单就简单些,如果能简单的地方弄复杂了,否则一堆的 bug 等着我们;
3,所以我们要先讲组合关系,再讲继承关系,就想告诉大家,在实际的工程开发里面,我们进行设计的时候,先考虑组合关系,看下组合关系能不能满足我们的需求、能不能描述我们实际的问题,如果可以就用组合关系,因为组合简单,如果不可以用组合关系,则应该看看我们当前面临的问题需要用继承来解决,因为继承肯定的比继承复杂的多的多,不是一个数量级的,这就是为什么先讲组合关系;
9,继承关系:父子关系:
1,简单的说继承关系就是父子关系;
2,惠普电脑是一种特殊电脑,苹果电脑也是一种特殊的电脑;惠普电脑是电脑的一个特化实例,可以说惠普电脑是一种电脑,但绝对不能说电脑是一种惠普电脑(这里赋值兼容性体现出来了,子类对象可以当做父类对象使用,父类对象不可以当做子类对象使用,子类就是一种特殊的父类),这是生活中的常识;
3,当两个概念之间存在这种特化关系时,其实已经发生了继承关系;惠普电脑一定会有电脑的所有特征(子类拥有父类的所有属性和行为),但是电脑不一定有惠普电脑的特征(子类可以添加父类没有的方法和属性,也可以重写父类的成员函数),因为这种关系是单向的,继承关系必然有一个角色叫做父类,另一个角色叫做子类,子类继承了父类的一切特征;
10,面向对象中的继承:
1,面向对象中的继承和生活中的继承是相似的,也是指的父子关系;
2,这种父子关系是发生在类之间,发生在类之间的父子关系很明显的就说明了有一个类是父类,而另一个类是子类;
11,面向对象中的继承指类之间的父子关系:
1,子类拥有父类的所有属性和行为;
1,惠普电脑肯定有父类的所有属性,比如内存、硬盘、CPU、主板,行为包括开机;
2,子类就是一种特殊的父类;
1,惠普电脑是一种电脑;
1,“特殊的”寓意着除了父类的特性外还有自身的特性;
3,子类对象可以当作父类对象使用;
1,我工作需要一台电脑,这里的需要的是一个父类的对象,然而我们真正提供的惠普电脑是一个子类的对象;
2,惠普电脑可以工作,这就是说明了子类对象是可以当做父类对象使用的;
3,这是很重要的一个技术,面向对象里面的很多技术都与这个技术息息相关;
4,子类中可以添加父类没有的方法和属性;
1,儿子要比父亲强大,长江后浪推前浪;
12,C++ 中通过下面的方式描述继承关系:
1,代码示例:
1 class Parent
2 {
3 int mv;
4
5 public:
6 void method();
7 };
8
9 class Child : public Parent // 描述继承关系;冒号代表了继承,继承自 Parent 类;
10 {
11 // ...
12 };
13,继承初体验编程实验:
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 Parent p1 = c; // 子类对象可以当做父类对象使用;
35 Parent p2;
36
37 p2 = c; // 子类对象可以当做父类对象使用;
38
39 c.hello();
40 c.method(); // mv = 100;
41
42 return 0;
43 }
1,子类中继承了父类的成员函数,包括构造函数,意味着子类创建的时候,会调用父类的构造函数,以继承父类中属性的状态;
2,想要使用一个已经存在的类的时候,我们不用复制粘贴它的代码,可以继承得到已有类的代码,并且还可以添加新的成员;
3,继承的深层次意义就是代码复用;
14,继承重要规则:
1,子类就是一个特殊的父类;
1,子类拥有父类的所有特性,所以是父类,子类可以自己添加新的特性,所以特殊;
2,子类对象可以直接初始化父类对象;
1,因为子类是一个特殊的父类;
3,子类对象可以直接赋值给父类对象;
15,继承的意义