点击这里给我发消息 点击这里给我发消息

C/C++ 学习手札(二)

添加时间:2013-12-7
    相关阅读: C++
副标题#e#

    我们研究一下继承和虚函数。

    比如我们需要求正方形、长方形的周长、面积:

    选择1计算长方形

    选择2计算正方形

    选择3退出

    其他无效

    我们做一个继承实现,父类矩形,子类有正方形、长方形继承矩形

    C++的继承语法如下:

    矩形

    class Rectangle

    正方形

    class Square: public Rectangle

    长方形

    class Oblong: public Rectangle

    对正方形、长方形求面积、周长。面积公式相同,在矩形父类完成,函数area();周长公式不同,在各个子类种实现。这里有一个虚函数side()。

 /**
 * 求边长
 */
virtual int side()=0;

    让函数side()=0;是在此定义,由子类实现。类似于Java的抽象父类,指定需要子类实现的方法。

    矩形类:

 /**
 * 矩形
 */
class Rectangle {
protected:
    int a; // a边
    int b; // b边
public:
    /**
     * 求面积
     */
    int area() {
        return a * b;
    }
    /**
     * 求边长
     */
    virtual int side()=0;
};

    设置了a、b两边且为protected供子类直接使用,给出了求面积的函数实现area(),同时定义了求边长的函数side(),要求函数side()由子类实现。

    正方形类:

 /**
 * 正方形
 */
class Square: public Rectangle {
public:
    /**
     * 设置边
     */
    void setA(int a) {
        this->a = a;
        this->b = a;
    }
    /**
     * 求边长
     */
    virtual int side() {
        return 4 * a;
    }
};

    实现了求边长函数side(),同时加入设置边函数setA(int a)。

    长方形类:

 /**
 * 长方形
 */
class Oblong: public Rectangle {
public:
    /**
     * 设置a边
     */
    void setA(int a) {
        this->a = a;
    }
    /**
     * 设置b边
     */
    void setB(int b) {
        this->b = b;
    }
    /**
     * 求边长
     */
    virtual int side() {
        return 2 * a * b;
    }
};

 

#p#副标题#e#

 

    实现了求边长函数side(),同时加入设置边函数setA(int a)和setB(int b)。

    根据输入做相应计算:

 /**
 * 计算
 */
inline void calculate() {
    int chioce; // 选项
    int a; // a边
    int b; // b边

    Oblong o; // 长方形
    Square s; // 正方形

    cout << endl;
    cout << "选择矩形类型:" << endl;
    cout << "1-长方形" << endl;
    cout << "2-正方形" << endl;
    cout << "3-退出" << endl;

    cin >> chioce;

    switch (chioce) {
    case 1:

        cout << "输入a边:";
        cin >> a;
        cout << "输入b边:";
        cin >> b;

        o.setA(a);
        o.setB(b);

        cout << "面积为:" << o.area() << endl;
        cout << "周长为:" << o.side() << endl;

        calculate();
        break;
    case 2:

        cout << "输入a边:";
        cin >> a;

        s.setA(a);

        cout << "面积为:" << s.area() << endl;
        cout << "周长为:" << s.side() << endl;

        calculate();
        break;
    case 3:
        break;
    default:
        cout << "无效输入" << endl;
        calculate();
        break;
    }
}

    给出整体代码:

 #include <iostream>

using namespace std;

/**
 * 矩形
 */
class Rectangle {
protected:
    int a; // a边
    int b; // b边
public:
    /**
     * 求面积
     */
    int area() {
        return a * b;
    }
    /**
     * 求边长
     */
    virtual int side()=0;
};

/**
 * 正方形
 */
class Square: public Rectangle {
public:
    /**
     * 设置边
     */
    void setA(int a) {
        this->a = a;
        this->b = a;
    }
    /**
     * 求边长
     */
    virtual int side() {
        return 4 * a;
    }
};

/**
 * 长方形
 */
class Oblong: public Rectangle {
public:
    /**
     * 设置a边
     */
    void setA(int a) {
        this->a = a;
    }
    /**
     * 设置b边
     */
    void setB(int b) {
        this->b = b;
    }
    /**
     * 求边长
     */
    virtual int side() {
        return 2 * a * b;
    }
};

/**
 * 计算
 */
inline void calculate() {
    int chioce; // 选项
    int a; // a边
    int b; // b边

    Oblong o; // 长方形
    Square s; // 正方形

    cout << endl;
    cout << "选择矩形类型:" << endl;
    cout << "1-长方形" << endl;
    cout << "2-正方形" << endl;
    cout << "3-退出" << endl;

    cin >> chioce;

    switch (chioce) {
    case 1:

        cout << "输入a边:";
        cin >> a;
        cout << "输入b边:";
        cin >> b;

        o.setA(a);
        o.setB(b);

        cout << "面积为:" << o.area() << endl;
        cout << "周长为:" << o.side() << endl;

        calculate();
        break;
    case 2:

        cout << "输入a边:";
        cin >> a;

        s.setA(a);

        cout << "面积为:" << s.area() << endl;
        cout << "周长为:" << s.side() << endl;

        calculate();
        break;
    case 3:
        break;
    default:
        cout << "无效输入" << endl;
        calculate();
        break;
    }
}

/**
 * 主函数
 */
int main() {
    calculate();

    return 0;
}

    运行结果:

 选择矩形类型:
1-长方形
2-正方形
3-退出
1
输入a边:3
输入b边:5
面积为:15
周长为:30

选择矩形类型:
1-长方形
2-正方形
3-退出
2
输入a边:5
面积为:25
周长为:20

选择矩形类型:
1-长方形
2-正方形
3-退出
4
无效输入

选择矩形类型:
1-长方形
2-正方形
3-退出
3

相关C/C++&nbsp;学习手札(二)

咨询热线:020-85648757 85648755 85648616 0755-27912581 客服:020-85648756 0755-27912581 业务传真:020-32579052
广州市网景网络科技有限公司 Copyright◎2003-2008 Veelink.com. All Rights Reserved.
广州商务地址:广东省广州市黄埔大道中203号(海景园区)海景花园C栋501室
= 深圳商务地址:深圳市宝源路华丰宝源大厦606
研发中心:广东广州市天河软件园海景园区 粤ICP备05103322号 工商注册