//第二十章友元类与嵌套类 2嵌套类
//C++不光可以包含对像,还可以包含类,我们把C++所包含的类叫做嵌套类
//不过,包含对像与嵌套类有着本质的不同,包含对像只是将另一个类的对像作为该类的成员,而嵌套类似则是在该类中定义了一种新的类型,这个类型只能在该类中使用
#include <iostream>
using namespace std;
class rectangle
{
public:
//这里直接在rectangel的公有部分定义了一个类
class point
{
public:
void setX(int x){ itsx = x;}
void setY(int y){ itsy = y;}
int getx()const{ return itsx;}
int gety()const{ return itsy;}
private:
int itsx; //x
int itsy; //y
};
point GetUpLeft()const{ return upleft; }
point GetLowLeft()const{ return lowerleft;}
point GetUpRight()const{ return upright;}
point GetLowRight()const{ return lowerright;}
//构造函数,在下面定义
rectangle(int top, int left, int bottom, int right);
~rectangle(){}
//分别取得top left right bottom的值
int GetTop()const{ return Top;}
int GetLeft()const{ return Left;}
int GetBottom()const{ return Bottom; }
int GetRight()const{ return Right;}
//设置upleft lowleft upright lowright的值
void SetUpLeft(){ upleft.setX(Left); upleft.setY(Top); }
void SetLowLeft(){ lowerleft.setX(Left); lowerleft.setY(Bottom); }
void SetUpRight(){ upright.setX(Right); upright.setY(Top); }
void SetLowRight(){ lowerright.setX(Right); lowerright.setY(Bottom); }
//设置 top left right bottom
void SetTop(int a){ Top = a;}
void SetLeft(int a){ Left = a;}
void SetRight(int a){ Right = a;}
void SetBottom(int a){ Bottom = a;}
int GetArea()const{
int width = Right - Left;
int height = Bottom - Top;
return (width*height);
}
private:
//这四个变量的类型分别是point类型的
point upleft;
point lowerleft;
point upright;
point lowerright;
//上下左右
int Top;
int Left;
int Bottom;
int Right;
};
rectangle::rectangle(int top, int left, int bottom, int right)
{
Top = top;
Left = left;
Bottom = bottom;
Right = right;
upleft.setX(Left);
upleft.setY(Top);
upright.setX(Right);
upright.setY(Top);
lowerright.setX(Right);
lowerright.setY(Bottom);
lowerleft.setX(Left);
lowerleft.setY(Bottom);
}
class point
{
public:
int GetArea(rectangle &rec){ return rec.GetArea(); }
};
int main()
{
rectangle date(40,50,60,80);
cout<<"左边为:"<<date.GetLeft()<<endl;
cout<<"下边为:"<<date.GetBottom()<<endl;
cout<<"左上的x坐标为:"<<date.GetLowLeft().getx()<<endl;
cout<<"左上的y坐标为:"<<date.GetLowLeft().gety()<<endl;
cout<<"矩形面积为:"<<date.GetArea()<<endl;
cout<<"重新设置left和Bottom值"<<endl;
date.SetLeft(0);
date.SetBottom(100);
date.SetLowLeft();
cout<<"左边为:"<<date.GetLeft()<<endl;
cout<<"下边为:"<<date.GetBottom()<<endl;
cout<<"左上的x坐标为:"<<date.GetLowLeft().getx()<<endl;
cout<<"左上的y坐标为:"<<date.GetLowLeft().gety()<<endl;
point pt;
cout<<"矩形面积为:"<<pt.GetArea(date)<<endl;
return 0;
}