100%采纳,求模板内容(关键词-class)

定义一个矩形类,数据成员为左上角和右下角两点的坐标: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;
 }