1.在已有类rectangle基础上,通过将其作为square类的一个成员,从而得到一个正方形的类
#include<iostream>
#include<string>
using namespace std;
class Rectangle {
public:
Rectangle(double wid = 1, double hei = 1) :width(wid), height(hei) {};
double getWidth() { return width; };
void setWidth(double wid) { width = wid; };
double getHeight() { return height; }
void setHeight(double hei) { height = hei; }
double area() { return width * height; } //返回面积
double parimeter() { return (width + height) * 2; } //返回周长
void scale(double fw, double fh) { width *= fw; height *= fh; }//放缩长 和 宽
protected:
double width, height;
};
//利用组合,将rectangle类作为 成员类,实现Square正方形类
class Square
{
public:
Rectangle rect; //只能调用默认构造函数--可以在 组合类的构造函数中 调用成员类的 构造函数,
//悟:可以在 组合类的 构造函数中显示的调用 成员类的 构造函数,虽然组合类构造先开始,但是后结束
//定义构造函数:
Square(double len) :rect(len, len), length(len) {};
void setLen(double len) {
length = len;
rect.setWidth(len);
rect.setHeight(len);
}
double getLen() { return this->length; }
double area() { return rect.area(); } //复用rectangle类的成员函数
double parimeter() { return rect.parimeter(); } //复用计算周长
void scale(double fl) { //复用放缩边长
this->length *= fl;
rect.scale(fl, fl);
}
private:
double length; //边长
};
int main()
{
//测试:
Square test(2.5);
cout << "正方形的面积是 " << test.area() << endl;
cout << "正方形的 周长是 " << test.parimeter() << endl;
//重新设定 边长:
test.setLen(1.5);
cout << "重新 设定边长: " << endl;
cout << "正方形的面积是 " << test.area() << endl;
cout << "正方形的 周长是 " << test.parimeter() << endl;
//放缩之后
cout << "放缩之后:" << endl;
test.scale(2);
cout << "正方形的面积是 " << test.area() << endl;
cout << "正方形的 周长是 " << test.parimeter() << endl;
return 0;
}