设计一个具有拷贝构造、复制赋值、移动构造和移动赋值功能的CSamplePart类,再设计一个含类型为CSamplePart的数据成员的类,让编译器为你合成拷贝构造、移动构造、复制赋值和移动赋值。编写测试程序.测试合成的拷贝控制函数的效果
时间: 2024-05-03 16:20:35 浏览: 11
好的,你的问题是关于C++编程的。我会尽力回答。
首先,让我们设计一个具有拷贝构造、复制赋值、移动构造和移动赋值功能的CSamplePart类:
```
class CSamplePart {
public:
// 默认构造函数
CSamplePart() = default;
// 自定义构造函数
CSamplePart(int num) : m_num(num) {}
// 拷贝构造函数
CSamplePart(const CSamplePart& other) : m_num(other.m_num) {
std::cout << "Copy constructor called" << std::endl;
}
// 移动构造函数
CSamplePart(CSamplePart&& other) noexcept : m_num(std::exchange(other.m_num, 0)) {
std::cout << "Move constructor called" << std::endl;
}
// 复制赋值函数
CSamplePart& operator=(const CSamplePart& other) {
m_num = other.m_num;
std::cout << "Copy assignment operator called" << std::endl;
return *this;
}
// 移动赋值函数
CSamplePart& operator=(CSamplePart&& other) noexcept {
m_num = std::exchange(other.m_num, 0);
std::cout << "Move assignment operator called" << std::endl;
return *this;
}
private:
int m_num;
};
```
然后,我们设计一个含类型为CSamplePart的数据成员的类:
```
class SampleClass {
public:
// 默认构造函数
SampleClass() = default;
// 自定义构造函数
SampleClass(int num) : m_samplePart(num) {}
private:
CSamplePart m_samplePart;
};
```
接下来,我们可以编写测试程序来测试合成的拷贝控制函数的效果:
```
int main() {
SampleClass sc1(10);
SampleClass sc2(sc1); // copy constructor
SampleClass sc3(std::move(sc1)); // move constructor
SampleClass sc4(20);
sc4 = sc2; // copy assignment operator
sc4 = std::move(sc3); // move assignment operator
return 0;
}
```
当我们运行这段代码时,输出结果应该如下:
```
Copy constructor called
Move constructor called
Copy constructor called
Move assignment operator called
Move constructor called
Move assignment operator called
```
这意味着拷贝构造、复制赋值、移动构造和移动赋值函数都被正确定义和调用。
希望这个回答能够帮到你。