C++ 指明;常数;在c+中重载运算符时+;

C++ 指明;常数;在c+中重载运算符时+;,c++,pointers,reference,overloading,constants,C++,Pointers,Reference,Overloading,Constants,代码: 4:typedef无符号短USHORT; 5:#包括 6: 7:班级柜台 8: { 9:公众: 10:计数器(); 11:~计数器(){} 12:USHORT GetItsVal()常量{return itsVal;} 13:void SetItsVal(USHORT x){itsVal=x;} 14:void Increment(){++itsVal;} 15:常量计数器和运算符++(); 16: 17:私人: 18:USHORT itsVal; 19: 20: }; 2

代码:

4:typedef无符号短USHORT;
5:#包括
6:
7:班级柜台
8:     {
9:公众:
10:计数器();
11:~计数器(){}
12:USHORT GetItsVal()常量{return itsVal;}
13:void SetItsVal(USHORT x){itsVal=x;}
14:void Increment(){++itsVal;}
15:常量计数器和运算符++();
16:
17:私人:
18:USHORT itsVal;
19:
20:    };
21:
22:计数器::计数器():
23:itsVal(0)
24:    {};
25:
26:常量计数器和计数器::运算符++()
27:    {
28:++itsVal;
29:返回*此项;
30:    }
31:
32:int main()
33:    {
34:柜台一;

35:cout运算符返回对内部参数的引用作为常量引用,这意味着客户端代码无法修改从运算符接收的引用

另一方面,如果成员函数本身是常量:

4: typedef unsigned short  USHORT;
5: #include <iostream.h>
6:
7:     class Counter
8:     {
9:        public:
10:          Counter();
11:          ~Counter(){}
12:          USHORT GetItsVal()const { return itsVal; }
13:          void SetItsVal(USHORT x) {itsVal = x; }
14:          void Increment() { ++itsVal; }
15:          const Counter& operator++ ();
16:
17:       private:
18:          USHORT itsVal;
19:
20:    };
21:
22:    Counter::Counter():
23:    itsVal(0)
24:    {};
25:
26:    const Counter& Counter::operator++()
27:    {
28:       ++itsVal;
29:       return *this;
30:    }
31:
32:    int main()
33:    {
34:       Counter i;
35:       cout << "The value of i is " << i.GetItsVal() << endl;
36:       i.Increment();
37:       cout << "The value of i is " << i.GetItsVal() << endl;
38:       ++i;
39:       cout << "The value of i is " << i.GetItsVal() << endl;
40:       Counter a = ++i;
41:       cout << "The value of a: " << a.GetItsVal();
42:       cout << " and i: " << i.GetItsVal() << endl;
48:     return 0;
49: }

然后,函数将不允许修改其任何成员。目前,它可以在返回引用之前进行任何修改。

运算符将对内部参数的引用作为常量引用返回,这意味着客户端代码无法修改从运算符收到的引用

另一方面,如果成员函数本身是常量:

4: typedef unsigned short  USHORT;
5: #include <iostream.h>
6:
7:     class Counter
8:     {
9:        public:
10:          Counter();
11:          ~Counter(){}
12:          USHORT GetItsVal()const { return itsVal; }
13:          void SetItsVal(USHORT x) {itsVal = x; }
14:          void Increment() { ++itsVal; }
15:          const Counter& operator++ ();
16:
17:       private:
18:          USHORT itsVal;
19:
20:    };
21:
22:    Counter::Counter():
23:    itsVal(0)
24:    {};
25:
26:    const Counter& Counter::operator++()
27:    {
28:       ++itsVal;
29:       return *this;
30:    }
31:
32:    int main()
33:    {
34:       Counter i;
35:       cout << "The value of i is " << i.GetItsVal() << endl;
36:       i.Increment();
37:       cout << "The value of i is " << i.GetItsVal() << endl;
38:       ++i;
39:       cout << "The value of i is " << i.GetItsVal() << endl;
40:       Counter a = ++i;
41:       cout << "The value of a: " << a.GetItsVal();
42:       cout << " and i: " << i.GetItsVal() << endl;
48:     return 0;
49: }

然后,函数将不允许修改其任何成员。目前,它可以在返回引用之前进行任何修改。

哦,我明白了。因此
Counter&Counter::operator++()
意味着函数不能更改成员变量,
const Counter&Counter::operator++()
表示返回对象是一个常量引用,对吗?然后是代码中的“const”点,以防止用户将不同的值分配给i++(例如
i++=500
)?@user207886是的,它允许您返回对数据的引用(出于性能原因)不允许客户端修改对象的内容;如果您返回一个非常量引用,客户端就可以这样做。感谢您澄清“常量”的含义!哦,我明白了。所以
Counter&Counter::operator++()const
表示函数无法更改成员变量,
const Counter&Counter::operator++()
表示返回对象是一个常量引用,对吗?然后是代码中的“const”点,以防止用户为i++指定不同的值(例如
i++=500
)?@user207886是的,它允许您返回对数据的引用(出于性能原因),而不允许客户端修改对象的内容;如果您返回非常量引用,客户端可以修改对象的内容。感谢您澄清“常量”的含义!