C++继承和多态的代码求帮助!!求帮忙写个例子!!

classcircle{/*usermethods*/public:circle();circle(floatr);~circle();voidmove(floatdx,... class circle {
/* user methods */
public:
circle();
circle(float r);
~circle();
void move(float dx, float dy);
void zoom(float scale);
float area();
static const float PI=3.1415926535;
/* implementation attributes */
private:
float x, y;
float r;
};

#include "circle_v1.h"
circle::circle() {
x=y=0.0;
r=1.0;
}
circle::circle(float radius) {
x=y=0.0;
r=radius;
}
circle::~circle() {}
void circle::move(float dx, float dy) {
x += dx;
y += dy;
}
void circle::zoom(float scale) {
r *= scale;
}
float circle::area() {
return PI * r * r;
}

#include <iostream>
#include "circle_v1.h"
using namespace std;
int main () {
float s1,
circle circ1,
s1=circ1.area();
cout << "area: " << s1 << endl;
这些代码,用继承和多态来写出三角,长方,平行四边形和梯形的代码
不能4个全部写出来也没关系,我就是想看看应该要怎么写
用OpengGL更好啦~
展开
 我来答
ahcc08
推荐于2016-01-26 · 知道合伙人软件行家
ahcc08
知道合伙人软件行家
采纳数:11853 获赞数:51941
拥有丰富的软件开发经验。

向TA提问 私信TA
展开全部
// 下面简单写了一个例子,你可以看下原理
#include <iostream>

using namespace std;

// 父类
class Shape
{

public:
   // 父类有一个虚方法,求面积
   virtual double area(int width, int height = 0)
   {
        return 0;
   }

};

class  Circle:public Shape
{
    virtual double area(int width, int height = 0)
    {
        return 3.14 * width * width;
    }
};

class  CRectant:public Shape
{
    virtual double area(int width, int height = 0)
    {
        return width * height;
    }
};

int main() 

    int nChoice;

    cout << "请输入选择,0:求圆的面积,非0:求矩形面积"<<endl;

    cin >> nChoice;

    // 父类的指针
    Shape * pshape = NULL;

    if (0 == nChoice)
    {
        // new成子类的对象
        pshape = new Circle();
    }
    else
    {
        // new成子类的对象
        pshape = new CRectant();
    }

    // 这里会调用相应的子类的area方法
    cout << pshape->area(10, 20) << endl;
    
    return 0; 
}

运行结果:

jiangsanhuo
2014-07-29 · TA获得超过169个赞
知道小有建树答主
回答量:291
采纳率:81%
帮助的人:175万
展开全部
虚拟基类

class shape{

public:
shape();
virtual ~shape();

virtual void move(float,float) = 0;
virtual zoom(float)=0;
virtual float area() = 0;

};

派生类

class circle:public shape {
/* user methods */
public:
circle();
circle(float r);
~circle();
void move(float dx, float dy); //
void zoom(float scale);
float area();
static const float PI=3.1415926535;
/* implementation attributes */
private:
float x, y;
float r;
};
更多追问追答
追问
但是算圆的时候是基于圆心(x,y)和半径r,但矩形的话是底和高,用户输入的时候会不会混乱呢?而且如果矩形是用底和高的话,该怎么用zoom和move啊??抱歉没有采纳你的....但是求帮助
追答
这个就是多态啊  虚基类只提供接口定义, 具体的工作由派生类负责完成(通过改写虚函数)。

另外一个原则就是,如果某个类确认会被继承,务必将析构函数声明为虚函数,切记。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式