第十章、面向对象编程

1. 面向对象编程思想

面向对象编程(Object Oriented Programming,OOP)的思想是把一切看成现实世界的物体(对象),通过对象和对象之间的关系来构建软件系统。

面向对象编程思想的组成要素是对象

是对象的描述(蓝图)

对象是由类创建的实例,真正占用内存的变量。

思想是用类来描述对象的行为。用类封装对象数据。

描述方法示例

有两个人(Human),张三(zhang3) 和 李四(li3)

张三工作赚钱 1000 元
李四借张三 300 元
李四买游戏机花了270元;
张三教李四玩王者荣耀
李四教张三 C++

用 C++ 语言来描述面相对象的思想,如下所示。

示例代码

// filename: oop_demo.cpp
#include <iostream>
#include <string.h>

using namespace std;

class Human {
    public:
        Human(const char * n) : name(n),money(0){}
        void showInfo(void) {
            cout << name << ", 有钱:" << money << "元, 技能:" << skill << endl;
        }
        void work(int m) {
            money += m;
            cout << name << " 工作赚了" << m << "元,共有"  << money << "元" << endl;
        }
        void borrowFrom(Human & h, int m) {
            if (m > h.money) {
                cout << h.name << "没有" << m << "元这么多钱,借钱失败!" << endl;
                return;
            }
            h.money -= m;
            money += m;
            cout << h.name << "借给" << name << m << "元钱!" << endl;
        }
    private:
        string name;
        int money;
        string skill; // 技能 :w

};

int main(int argc, char * argv[]) {
    // 有两个人(Human),张三(zhang3) 和 李四(li3)
    Human zhang3("张三");
    Human li4("李四");

    // 张三工作赚钱 1000 元
    zhang3.work(1000);
    // 李四借张三 300 元
    li4.borrowFrom(zhang3, 300);
    zhang3.showInfo();
    li4.showInfo();
    // 李四买游戏机花了270元;
    // li4.buy("游戏机", 270);
    // 李四教张三玩王者荣耀
    // li4.teach(zhang3, "王者荣耀");
    // 张三教李四 C++
    // zhang3.teach(li4, "C++");

    cout << "程序结束!" << endl;
    return 0;
}

编译和运行结果如下:

weimz@mzstudio:~$ g++ -o oop_demo oop_demo.cpp
weimz@mzstudio:~$ ./oop_demo 
张三 工作赚了1000元,共有1000元
张三借给李四300元钱!
张三, 有钱:700元, 技能:
李四, 有钱:300元, 技能:
程序结束!

练习

完成面向对象思想示例的张三、李四的其他逻辑。