快速业务通道

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

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-29

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

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

选择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á?±??ò?aprotected1?×óàà?±?óê1ó?£???3?á??ó???yμ?oˉêyêμ??area£¨£?£?í?ê±?¨ò?á??ó±?3¤μ?oˉêyside£¨£?£?òa?óoˉêyside£¨£?óé×óààêμ???£

?y·?D?àà£o

/**
??* ?y·?D?
??*/
class Square: public Rectangle {
public:
?????? /**
???????? * éè??±?
???????? */
?????? void setA(int a) {
?????????????? this->a = a;
?????????????? this->b = a;
?????? }
?????? /**
???????? * ?ó±?3¤
???????? */
?????? virtual int side() {
?????????????? return 4 * a;
?????? }
};

êμ??á??ó±?3¤oˉêyside£¨£?£?í?ê±?óè?éè??±?oˉêysetA£¨int a£??£

3¤·?D?àà£o

/**
??* 3¤·?D?
??*/
class Oblong: public Rectangle {
public:
?????? /**
???????? * éè??a±?
???????? */
?????? void setA(int a) {
?????????????? this->a = a;
?????? }
?????? /**
???????? * éè??b±?
???????? */
?????? void setB(int b) {
?????????????? this->b = b;
?????? }
?????? /**
???????? * ?ó±?3¤
???????? */
?????? virtual int side() {
?????????????? return 2 * a * b;
?????? }
};

êμ??á??ó±?3¤oˉêyside£¨£?£?í?ê±?óè?éè??±?oˉêysetA£¨int a£?oísetB£¨int b£??£?ù?Yê?è?×??àó|????£o

/**
??* ????
??*/
inline void calculate() {
?????? int chioce; // ????
?????? int a; // a±?
?????? int b; // b±?

?????? Oblong o; // 3¤·?D?
?????? Square s; // ?y·?D?

?????? cout << endl;
?????? cout << "??????D?ààDí£o" << endl;
?????? cout << "1-3¤·?D?" << endl;
?????? cout << "2-?y·?D?" << endl;
?????? cout << "3-í?3?" << endl;

?????? cin >> chioce;

?????? switch (chioce) {
?????? case 1:

?????????????? cout << "ê?è?a±?£o";
?????????????? cin >> a;
?????????????? cout << "ê?è?b±?£o";
?????????????? cin >> b;

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

?????????????? cout << "???y?a£o" << o.area() << endl;
?????????????? cout << "?ü3¤?a£o" << o.side() << endl;

?????????????? calculate();
?????????????? break;
?????? case 2:

?????????????? cout

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号