定义一个矩形类,数据成员为左上角和右下角两点的坐标:x1,y1,x2,y2,均为整数。类成员函数具有的功能求周长、面积,还包括构造函数、设置值及读取值的成员函数。主函数输入矩形左上角、右下角两组坐标值,输出周长和面积。
class CRectangle
{
public:
CRectangle();
CRectangle(double,double,double,double); //构造函数,设定矩形坐标初始值;
void setRectangle(double,double,double,double);
// 函数形参:值传递。语句调用。
void readRectangle(double*,double*,double*,double*); //函数形参,地址传递,语句调用。
double findArea(){
return fabs(x2-x1)*fabs(y2-y1);
}
double findPerimeter(){
return 2*(fabs(x2-x1)+fabs(y2-y1));
}
private:
double x1,y1,x2,y2; //矩形左上角和右下角两组坐标,私有数据,只有类中函数访问。
};
CRectangle::CRectangle(){}
CRectangle::CRectangle(double xl,double yl,double xr,double yr){
x1=xl;y1=yl;x2=xr;y2=yr;
}
void CRectangle::setRectangle(double xl,double yl,double xr,double yr){
x1=xl;y1=yl;x2=xr;y2=yr;
}
void CRectangle::readRectangle(double* xl,double* yl,double* xr,double* yr){
*xl=x1;*yl=y1;*xr=x2;*yr=y2;
}
#include <iostream>
#include <cmath>
using namespace std;
template<class T>
class CRectangle
{
public:
CRectangle();
CRectangle(T,T,T,T); //构造函数,设定矩形坐标初始值;
void setRectangle(T,T,T,T);
// 函数形参:值传递。语句调用。
void readRectangle(T*,T*,T*,T*); //函数形参,地址传递,语句调用。
T findArea(){
return fabs(x2-x1)*fabs(y2-y1);
}
T findPerimeter(){
return 2*(fabs(x2-x1)+fabs(y2-y1));
}
private:
T x1,y1,x2,y2; //矩形左上角和右下角两组坐标,私有数据,只有类中函数访问。
};
template<class T>
CRectangle<T>::CRectangle(void){x1=0;y1=0;x2=0;y2 = 0;}
template<class T>
CRectangle<T>::CRectangle(T xl,T yl,T xr,T yr){
x1=xl;y1=yl;x2=xr;y2=yr;
}
template<class T>
void CRectangle<T>::setRectangle(T xl,T yl,T xr,T yr){
x1=xl;y1=yl;x2=xr;y2=yr;
}
template<class T>
void CRectangle<T>::readRectangle(T* xl,T* yl,T* xr,T* yr){
*xl=x1;*yl=y1;*xr=x2;*yr=y2;
}
int main()
{
CRectangle<int> r1(0,0,4,4);
cout<<r1.findArea()<<endl;
CRectangle<float> r2(1.5,1.5,4.5,4.5);
cout<<r2.findArea()<<endl;
CRectangle<double> r3(2.5,2.5,9.88888,9.88888);
cout<<r3.findArea()<<endl;
return 0;
}