一般有三种情况下,复制构造函数是所谓的而不是赋值操作符:
当实例化一个对象并初始化它与另一个对象的值(如上面的例子)。
当传递一个对象的值。
一个对象是当函数返回的值。
在这些情况下,一个新的变量需要被创造之前的值可以被复制-因此使用复制构造函数。
因为复制构造函数和赋值操作符基本上做同样的工作(他们只是被称为在不同的情况下),代码来实现他们所需要的几乎是相同的。
一个重载的赋值操作符和复制构造函数,例
现在你明白两者之间的复制构造函数和赋值操作符,看看它们是如何实现的。简单的类,如我们的分类,它是非常简单的。
这里是我们的分类的简化版本:
1
2
3
4
5
6
7
8
9
10
class Cents
{
private:
int m_nCents;
public:
Cents(int nCents=0)
{
m_nCents = nCents;
}
};
首先,让我们添加复制构造函数。思考这个逻辑,因为它是一个构造函数,它需要被命名为仙。因为它需要复制一个已经存在的对象,它需要一个美分对象作为参数。最后,因为它是一个构造函数,它没有返回类型。把所有这些加在一起,这是我们的分类的复制构造函数。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Cents
{
private:
int m_nCents;
public:
Cents(int nCents=0)
{
m_nCents = nCents;
}
// Copy constructor
Cents(const Cents &cSource)
{
m_nCents = cSource.m_nCents;
}
};