不用构造函数解决问题:
1、Rectangle的矩形类,其属性(数据成员)为矩形的左下角与右上角两个点的坐标(共四个整数)。要求:类中定义以下成员函数(不定义构造函数)
(1)set 函数,输入矩形左下角和右上角的坐标。
(2)getL函数,计算并返回矩形的宽度(矩形中长的那条边为宽度)。
(3) getW函数。计算并返回矩形的高度(矩形中短的那条边为宽度)。
(4)area函数, 计算并返回矩形的面积。
#include <iostream>
using namespace std;
class Rectangle
{
private:
int x1, y1, x2, y2;
public:
void set(int xa, int ya, int xb, int yb);
int getL();
int getW();
int area();
};
void Rectangle::set(int xa, int ya, int xb, int yb)
{
x1 = xa;
y1 = ya;
x2 = xb;
y2 = yb;
}
int Rectangle::getL()
{
return abs(x2 - x1);
}
int Rectangle::getW()
{
return abs(y2 - y1);
}
int Rectangle::area()
{
return getL() * getW();
}
int main()
{
int a, b, c, d;
cin >> a >> b >> c >> d;
Rectangle r;
r.set(a, b, c, d);
cout << r.area() << endl;
return 0;
}
2、定义一个Point类,用来描述平面上的一个点,并定义成员函数Move ,支持点的移动操作。
要求:定义三个点A,B,C,
输入
输入三个点的坐标;输入第三个点移动到的目标位置
说明:坐标点的类型为int
输出
输出三个点的坐标。并输出A,B两点之间的距离。
#include <iostream>
#include <cmath>
using namespace std;
class Point
{
private:
int x;
int y;
public:
void set(int x1,int y1)
{
x=x1;
y=y1;
}
int getx(){return x;}
int gety(){return y;}
void move(int x2,int y2)
{
x=x2;
y=y2;
}
};
int main()
{
int a1,b1,c1,d,e,f,g,h;
cin>>a1>>b1>>c1>>d>>e>>f>>g>>h;
Point a,b,c;
a.set(a1,b1);
b.set(c1,d);
c.set(e,f);
c.move(g,h);
int distance=sqrt(pow(a.getx()-b.getx(),2)+pow(a.gety()-b.gety(),2));
cout<<"("<<a.getx()<<","<<a.gety()<<")"<<endl;
cout<<"("<<b.getx()<<","<<b.gety()<<")"<<endl;
cout<<"("<<c.getx()<<","<<c.gety()<<")"<<endl;
cout<<distance<<endl;
return 0;
}
3
定义一个分数类。
包含一组set 和get函数。该组函数分别完成数据成员赋值及获取数据成员值得功能。
定义一个成员函数,该成员函数以 a/b的方式输出一个分数。(要求对分子和分母进行约分)
#include <iostream> #include <cmath> using namespace std; class Fraction { public: int a; void set(int b) { a=b; } int get() { return a; } void zuida(int b) { int m=a; int n=b; while (b != 0) { int r=a % b; a = b; b = r; } cout << m/a << "/" << n/a<<endl; } }; int main() { Fraction test1,test2; int a,b; while (cin>>a>>b) { test1.set(a); test2.set(b); test1.zuida(test2.get()); } return 0; }