43-继承的概念和意义

43-继承的概念和意义

【问题】类之间是否存在直接的关联关系?

继承的概念

【范例代码】组合关系的描述

#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 {
    Memory mMem;
    Disk mDisk;
    CPU mCPU;
    MainBoard mMainBoard;
public:
    Computer() {
        cout << "Computer()" << endl;
    }
    void power() {
        cout << "power()" << endl;
    }
    void reset() {
        cout << "reset()" << endl;
    }
    ~Computer() {
        cout << "~Computer()" << endl;
    }
};

int main(int argc, const char* argv[]) {
    Computer c;

    return 0;
}
组合关系的特点:
  • 将其他类的对象作为当前类的成员使用
  • 当前类的对象与成员对象的生命期相同
  • 成员对象在用法上与普通对象完全一致

面向对象中的继承指类之间的父子关系:

  • 子类拥有父类的所有属性和行为
  • 子类就是一种特殊的父类
  • 子类对象可以当作父类对象使用
  • 子类中可以添加父类没有的方法和属性

C++通过下面的方式描述继承关系:

class Parent {
    int mv;
public:
    void method() { };
};

class Child : public Parent  {  // 描述继承关系

};

【范例代码】继承初体验

#include <iostream>
#include <string>

using namespace std;

class Parent {
    int mv;
public:
    Parent() {
        cout << "Parent()" << endl;
        mv = 100;
    }
    void method() {
        cout << "mv = " << mv << endl;
    }
};

class Child : public Parent {
public:
    void hello() {
        cout << "I'm Child calss!" << endl;
    }
};

int main(int argc, const char* argv[]) {
    Child c;

    c.hello();
    c.method();

    return 0;
}

重要规则:

  • 子类就是一个特殊的父类
  • 子类对象可以直接初始化父类对象
  • 子类对象可以直接赋值给父类对象

继承的意义

继承是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 {
    Memory mMem;
    Disk mDisk;
    CPU mCPU;
    MainBoard mMainBoard;
public:
    Computer() {
        cout << "Computer()" << endl;
    }
    void power() {
        cout << "power()" << endl;
    }
    void reset() {
        cout << "reset()" << endl;
    }
    ~Computer() {
        cout << "~Computer()" << endl;
    }
};

class HPBook : public Computer {
    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(int argc, const char* argv[]) {
    HPBook hp;

    hp.power();
    hp.install("Ubuntu 16.04 LTS");
    hp.OS();

    cout << endl;

    MacBook mac;

    mac.OS();

    return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值