拷贝构造函数讲解(附例题代码)
时间: 2023-11-12 12:10:34 浏览: 38
拷贝构造函数是一种特殊的构造函数,在创建一个新对象时,它会从另一个已存在的对象中复制构造函数参数。其函数原型为:
```
类名(const 类名 &obj)
```
其中,参数列表中的 "const" 关键字表示输入参数为只读, "&" 符号表示传递的是引用类型,即万一传进来的是个 reference ,就不会产生歧义。
以下是一个拷贝构造函数的示例代码:
```
#include <iostream>
using namespace std;
class Box {
public:
// 通常的构造函数
Box(double l = 2.0, double b = 2.0, double h = 2.0) {
cout <<"Constructor called." << endl;
length = l;
breadth = b;
height = h;
}
// 拷贝构造函数
Box(const Box &B) {
cout << "Copy constructor called." << endl;
length = B.length;
breadth = B.breadth;
height = B.height;
}
double Volume() {
return length * breadth * height;
}
private:
double length; // Length of a box
double breadth; // Breadth of a box
double height; // Height of a box
};
int main() {
Box Box1(3.3, 1.2, 1.5); //声明对象时调用了通常的构造函数
Box Box2(Box1); //声明对象时调用了拷贝构造函数
// 输出 Box1 的体积
cout << "Box1 的体积:" << Box1.Volume() << endl;
// 输出 Box2 的体积
cout << "Box2 的体积:" << Box2.Volume() << endl;
return 0;
}
```
在上面的代码中,我们声明了一个 Box 类,并声明了一个常用的构造函数和一个拷贝构造函数。这里的 Box1 对象调用了常用的构造函数,而 Box2 对象则在声明时调用了拷贝构造函数。最后,通过 Volume() 函数计算 Box1 和 Box2 对象的体积并输出。
希望这个示例能帮助你理解拷贝构造函数的概念。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)