思考:类之间是否存在直接的关联关系呢?生活中的例子组合关系: 整体与部分的关系实例分析: 组合关系的描述#include <iostream>using namespace std;class Memory{public: Memory() { cout << “Memory()” << endl; } ~Memory() { cout << “~Memory()” << endl; }};class Disk{public: Disk() { cout << “Disk()” << endl; } ~Disk() { cout << “~Disk()” << endl; }};class CPU{public: CPU() { cout << “CPU()” << endl; } ~CPU() { cout << “~CPU()” << endl; }};class MainBoard{public: MainBoard() { cout << “MainBoard()” << endl; } ~MainBoard() { cout << “~MainBoard()” << endl; }};class Computer{private: Memory mMem; Disk mDisk; CPU MCPU; MainBoard mMainBoard;public: Computer() { cout << “Computer()” << endl; } void power() { cout << “void power()” << endl; } void reset() { cout << “void reset()” << endl; } ~Computer() { cout << “~Computer()” << endl; }};int main(){ Computer c; return 0;}输出:Memory()Disk()CPU()MainBoard()Computer()~Computer()~MainBoard()~CPU()~Disk()~Memory()类之间的组合关系组合关系的特点将其它类的对象最为当前类的成员使用当前类的对象与成员对象的生命期相同成员对象在用法上与普通对象完全一致生活中的例子继承关系: 父子关系惊艳的继承面向对象中的继承指类之间的父子关系子类拥有父类的所有属性和行为子类是一种特殊的父类子类对象可以当作父类对象使用子类可以添加父类中没有的方法和属性C++ 中通过下面的方式描述继承关系class Parent{private: int mv;public: void method() { }};class Child : public Parent // 描述继承关系{};编程实验: 继承初体验#include <iostream>using namespace std;class Parent{public: Parent() { cout << “Parent()” << endl; } void method() { cout << “void method()” << endl; } ~Parent() { cout << “~Parent()” << endl; }};class Child : public Parent{public: Child() { cout << “Child()” << endl; } void hello() { cout << “I’m child class!” << endl; } ~Child() { cout << “~Child()” << endl; }};int main(){ Child c; c.hello(); c.method(); return 0;}输出:Parent()Child()I’m child class!void method()~Child()~Parent()分析:子类拥有父类所有的属性和行为;在子类定义时,父类的构造函数先被调用,子类的构造函数再被调用,析构顺序相反。重要规则:子类就是一个特殊的父类子类对象可以直接初始化父类对象子类对象可以直接赋值给父类对象void code(){ Child c; Parent p1 = c; Parent P2; p2 = c;}继承的意义继承是 C++ 中代码复用的重要手段。通过继承,可以获得父类的所有功能,并且可以在子类中重写已有功能,或者添加新功能。编程实验: 继承的强化练习#include <iostream>#include <string>using namespace std;class Memory{public: Memory() { cout << “Memory()” << endl; } ~Memory() { cout << “~Memory()” << endl; }};class Disk{public: Disk() { cout << “Disk()” << endl; } ~Disk() { cout << “~Disk()” << endl; }};class CPU{public: CPU() { cout << “CPU()” << endl; } ~CPU() { cout << “~CPU()” << endl; }};class MainBoard{public: MainBoard() { cout << “MainBoard()” << endl; } ~MainBoard() { cout << “~MainBoard()” << endl; }};class Computer{private: Memory mMem; Disk mDisk; CPU MCPU; MainBoard mMainBoard;public: Computer() { cout << “Computer()” << endl; } void power() { cout << “void power()” << endl; } void reset() { cout << “void reset()” << endl; } ~Computer() { cout << “Computer()” << endl; }};class HPBook : public Computer{private: string mOS;public: HPBook() { mOS = “Windows 8”; } void install(string os) { mOS = os; } void OS() { cout << mOS << endl; }};class MacBook : public Computer{public: void OS() { cout << “Mac OS” << endl; }}; int main(){ HPBook hp; hp.power(); hp.install(“Ubuntu 16.04 LTS”); hp.OS(); cout << endl; MacBook mac; mac.OS(); return 0;}输出:Memory()Disk()CPU()MainBoard()Computer()void power()Ubuntu 16.04 LTSMemory()Disk()CPU()MainBoard()Computer()Mac OSComputer()~MainBoard()~CPU()~Disk()~Memory()~Computer()~MainBoard()~CPU()~Disk()~Memory()小结继承是面向对象中类之间的一种关系子类拥有父类的所有属性和行为子类对象可以当作父类对象使用子类可以添加父类没有的方法和属性继承是面向对象中代码复用的重要手段补充:组合与继承是面向对象理论中的两种基本关系。其中组合关系较为简单,在实际项目中,优先考虑组合关系是否满足需求。以上内容参考狄泰软件学院系列课程,请大家保护原创!