codecamp

C++ 使用结构体表示矩形

现在假设我们要创建一个结构体来表示一个矩形。问题在于,我需要提供哪些信息来指定一个矩形?为了简化问题,我们假设矩形是垂直方向或水平方向的,没有倾斜角度。

存在几种可能:我可以指定矩形的中心(两个坐标)和大小(宽度和高度),我也可以指定矩形的一个角和矩形的大小,或是指定两个相对的角。

现有程序中最常见的选择是指定矩形的左上角和大小。在C++中,我们定义一个结构,包含着一个Point类型和两个double类型。

struct Rectangle {
  Point corner;
  double width, height;
};

注意到一个结构中可以包含另一个结构。事实上这种情况很常见。当然,这意味着为了创建一个Rectangle,我们得先创建一个Point:

Point corner = { 0.0, 0.0 };
Rectangle box = { corner, 100.0, 200.0 };

这段代码创建了一个新的Rectangle结构并对实例变量进行了初始化。下图展示了这些语句的效果。

enter image description here

我们可以用普通的方式来存取width和height:

box.width += 50.0;
cout << box.height << endl;

为了访问corner的实例变量,我们使用了一个临时变量:

Point temp = box.corner;
double x = temp.x;

或者我们可以把两条语句组合在一起:

double x = box.corner.x;

这条语句最好是从右向左读: "从box的corner中抽取x,然后把它赋给局部变量x。"

当我们谈到组合时,我必须指出,实际上你可以同时创建Point和Rectangle:

Rectangle box = { { 0.0, 0.0 }, 100.0, 200.0 };

最里面的大括号中是点corner的坐标;它们组成了新的Regtangle中三个值中的第一个。这条语句是嵌套结构的一个例子。

C++ 传引用调用
C++ 作为返回值的结构
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }