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更好啦~ 展开
/* 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更好啦~ 展开
2个回答
展开全部
// 下面简单写了一个例子,你可以看下原理
#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;
}
运行结果:
展开全部
虚拟基类
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;
};
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啊??抱歉没有采纳你的....但是求帮助
追答
这个就是多态啊 虚基类只提供接口定义, 具体的工作由派生类负责完成(通过改写虚函数)。
另外一个原则就是,如果某个类确认会被继承,务必将析构函数声明为虚函数,切记。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询