一个类定义如下:
class Widget {
double wgt;
public:
Widget(double w) : wgt(w) {assert(w>=0);}
double weight() const { return wgt;}
double & weight() { return wgt;}
};
为什么它必须包含方法
的两个实现重量
对于第一个,将const置于何处?对于第二个,放置和放置的效果是什么?有?
Widget(double w) : wgt(w) {assert(w>=0);}
的代码应该作为构造函数,但是如何在这里理解wgt(w)?
我们可以将此课程用作
Widget w(35);
cout <<w.weight()<<endl;
但我看不清w(35)如何通过定义的构造函数创建对象?
此外,这个w.weight使用了哪个函数权重的实现?
答案 0 :(得分:1)
Const - &gt;不可变值
&安培; (参考) - &gt; ''对可变值的引用的地址。
答案 1 :(得分:1)
Widget的代码(双w):wgt(w){assert(w&gt; = 0);}应该作为构造函数,但是如何在这里理解wgt(w)?
: wgt(w)
是此构造函数的初始化列表。例如,请参阅http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.6。因此,Widget w(35);
会创建并构建w
类型Widget
的变量wgt
,其weight
数据成员的初始值为35。
为什么必须包含方法
wgt
的两个实现?
它没有“有”,很多人会说这是不好的形式。提供这两个公共函数并使数据成员const
公开之间没有区别。至于为什么两个去:其中一个函数,w.weight() = 42;
限定版本,只能用作右值,一个等号右边的值。非const版本可以用作左值(在等号的左侧)或作为右值。例如,
{{1}}
答案 2 :(得分:0)
对于第一个,const保证调用方法不会更改任何widget对象的成员。
对于第二个,&amp;表示将返回引用而不是wgt成员的副本。因为它是一个参考,你可以通过
来改变wgt的值Widget w(3.3);
w.weight() = 45.3;
如果&amp;如果不存在,你仍然可以像我的例子中那样编写代码,但是即使在似乎为它分配45.3的行之后,w.wgt仍然会有它的原始值3.3。
构造函数中的wgt(w)意味着在构造对象时,给予类的wgt成员的初始值将是作为参数传递给构造函数的值。
通过将自己的cout打印添加到打印出不同内容的两种方法并查看哪一种打印出来,你可以自己找出w.weight()时调用的函数。