(1) 了解C++默默编写并调用了哪些函数
编译器可以暗自为你 创建 default构造函数,>
...
};
Transaction::Transaction()
{
....
logTransaction();
}
class BuyTransaction:>
...
private:
void>
关于赋值,写成连锁。
x = (y = (z = 15));
返回的是一个左侧对象。
不仅仅是用于>
比如>
Widget*>
{
... ...
>
先举几个自我赋值的例子:
例:Widget> *px = *py;//>“值”的赋值,但我们涉及对
“指针”和
“引用”进行赋值操作的时候,才是我们真正要考虑的问题了。
看下面的例子:
看下面的例子:
Widget& Widget::operator=(const Widget&>
> //如果*this ==>
> {
Bitmap *pOrig => >
> //如果*this ==>
> {
Bitmap *pOrig => >
- 确定任何函数如果操作一个以上的对象,而其中多个对象是同一个对象时,其行为仍然正确。
(8) 复制对象时 勿忘其每一个成分
还记得条款5中提到编译器在必要时会为我们提供拷贝构造函数和拷贝赋值函数,它们也许工作的不错,但有时候我们需要自己编写自己的拷贝构造函数和拷贝赋值函数。如果这样,我们应确保对“每一个”成员进行拷贝(复制)。
如果你在类中添加一个成员变量,你必须同时修改相应的copying函数(所有的构造函数,拷贝构造函数以及拷贝赋值操作符)。
在派生类的构造函数,拷贝构造函数和拷贝赋值操作符中应当显示调用基类相对应的函数,否则编译器可能又“自作聪明了”。
当你编写一个copying函数,请确保:
(1)复制所有local成员变量;
(2)调用所有基类内的适当copying函数。
但是,我们不该令拷贝赋值操作符调用拷贝构造函数,也不该令拷贝构造函数调用拷贝赋值操作符。想想,一个是拷贝(建立对象),一个是赋值(对象已经存在)。
请记住:
请记住:
- Copying函数应该确保复制“对象内的所有成员变量”及“所有基类成员”;
- 不要尝试以某个copying函数实现另一个copying函数。应该将共同机能放进第三个函数中,并由两个copying函数共同调用。