codecamp

C++ 对结构体的操作

大多数我们在其他类型上使用的操作符,例如数学运算符( +, %等)以及比较运算符(==,>等),都不适用于结构体。事实上,可以为这种新类型定义这些操作符的含义,不过在这本书中我们不会这么做。

另一方面,赋值运算符确实适用于结构。它可以用在两种方式上:初始化结构的实例变量或把实例变量从一个结构复制到另一个结构。一个初始化结构看起来像这样:

Point blank = { 3.0, 4.0 };

大括号里的值被依次赋给结构的实例变量。在这种情况下,x得到了一个值,y得到第二个值。

不幸的是,这个语法仅仅只能用在初始化中,而不能在赋值语句中。因此以下就是非法的。

Point blank;
blank = { 3.0, 4.0 };    // 错误!!

你可能想知道为什么如此完美合理的语句会是非法的;我不确定,但是我认为问题应该是编译器无法知道右边应该是什么类型。如果你添加一个类型定义:

Point blank;
blank = (Point){ 3.0, 4.0 };

这就可以了。

把一个结构赋给另一个结构是合法的。例如:

Point p1 = { 3.0, 4.0 };
Point p2 = p1;
cout << p2.x << ", " <<  p2.y << endl;

这个程序的输出是3, 4。

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; }