1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
class
Calc { private : int
m_nValue; public : Calc()
{ m_nValue = 0; } void
Add( int
nValue) { m_nValue += nValue; } void
Sub( int
nValue) { m_nValue -= nValue; } void
Mult( int
nValue) { m_nValue *= nValue; } int
GetValue() { return
m_nValue; } }; |
1
2
3
4
|
Calc
cCalc; cCalc.Add(5); cCalc.Sub(3); cCalc.Mult(4); |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
class
Calc { private : int
m_nValue; public : Calc()
{ m_nValue = 0; } Calc&
Add( int
nValue) { m_nValue += nValue; return
* this ;
} Calc&
Sub( int
nValue) { m_nValue -= nValue; return
* this ;
} Calc&
Mult( int
nValue) { m_nValue *= nValue; return
* this ;
} int
GetValue() { return
m_nValue; } }; |
我们已经有效地凝聚成一个三行的表达!让我们仔细看看它是如何工作的。
首先,CCalc。添加(5)称,这增加了我们的m_nvalue 5。add()然后返回*this,这是一个参考CCalc。我们的表达是现在CCalc。子(3)、(4)。CCalc。子(3)减去3从m_nvalue返回CCalc。我们的表达是现在CCalc多(4)。CCalc。多(4)乘以4,返回m_nvalue CCalc,然后被忽视。然而,由于每个函数修改CCalc是执行,CCalc现在包含值((0 + 5)–3)* 4),这是8。
虽然这是一个很牵强的例子链接功能,以这样的方式与字符串类常见。例如,它是可能的过载运算符来做一个字符串追加。如果运算符返回*this,就可能写这样的表达式:
这是很容易能够做到见效益!我们将覆盖重载运算符(和其他运营商)在未来教训。
带走这节课最重要的一点是,“这是任何成员函数指针的一个隐藏的参数。大多数时候,你将不需要直接访问它。值得注意的是,“这是一个const指针-你可以改变其所指向的对象的值,但是你不能做点别的东西!