书上说拷贝构造函数是一种特殊的构造函数,和构造函数一样有默认的情况,有默认的构造函数和默认的拷贝构造函数;而还有一节讲了构造函数的重载,里面没有提到拷贝构造函数;但是按函数的重载的定义:函数名一样,参数列表不一样。这样的定义也符合拷贝构造函数和构造函数的关系,所以不知道拷贝构造函数是不是构造函数的重载。
拷贝构造,如果愿意算是构造函数的重载,一个空类里边是有 默认的构造/析构/拷贝构造和赋值操作符重载四个函数的
class Example
{
};
等价于
class Example
{
public:
Example() = default;
~Example() = default;
Example & Example(const Example & rhs) = default;
Example & operator=(const Example & rhs) = default;
};
你可以看看这个里的 2.3.2 节
如果有帮助麻烦给个采纳吧,谢谢了~~
如果我们没有定义拷贝构造函数,编译器默认会合成一个。它会依次将给定对象的非静态成员变量逐个拷贝到正在创建的对象中。
内置成员变量直接拷贝,类对象成员使用其拷贝函数,数组则是逐个元素拷贝。
回答:拷贝构造函数是构造函数的一种重载形式。根据函数重载的定义,函数名相同但参数列表不同,则被认为是函数的重载形式。同样地,构造函数也可以重载,而拷贝构造函数就是具有特殊意义的一种构造函数。拷贝构造函数与普通构造函数一样具有默认的情况、默认的构造函数和默认的拷贝构造函数,但它们区别在于参数列表。拷贝构造函数只有一个参数,是该类的引用或者指针,一般为该类的const引用。因此,拷贝构造函数与普通构造函数可以被视为两种不同的函数,但归属于构造函数这一类。代码实现如下:
class Example {
public:
Example() {}
Example(const Example& ex) {}
// 其他构造函数
};