/***验证继承体系中的拷贝控制成员***/
#include<iostream>
using namespace std;
class Base {
public:
Base() = default;
Base(int i, int j) :num1(i), num2(j) { cout << "Base construct" << endl; }
Base(const Base& rhs) :num1(rhs.num1), num2(rhs.num2) { cout << "Base copy construct " << endl; }
Base& operator=(const Base& rhs)
{
num1 = rhs.num1;
num2 = rhs.num2;
cout << "Base copy =" << endl;
return *this;
}
Base(Base&& rhs):num1(rhs.num1), num2(rhs.num2) { cout << "Base move construct " << endl; }
Base& operator=(Base&& rhs)
{
num1 = rhs.num1;
num2 = rhs.num2;
cout << "Base move =" << endl;
return *this;
}
virtual ~Base() { cout << "Base virtual destroy function" << endl; }
int num1;
int num2;
};
class Dervied :public Base {
public:
Dervied() = default;
Dervied(int i , int j, int m , int n) :Base(i, j), num3(m), num4(n) { cout << "Derived construct" << endl; }
Dervied(const Dervied& rhs) :Base(rhs), num3(rhs.num3), num4(rhs.num4) { cout << "Dervied copy construct" << endl; } //拷贝构造函数
Dervied& operator=(const Dervied& rhs) //拷贝复制运算符
{
Base::operator=(rhs);
num3 = rhs.num3;
num4 = rhs.num4;
cout << "Dervied copy = " << endl;
return *this;
}
Dervied(Dervied&& rhs) :Base(std::move(rhs)), num3(rhs.num3), num4(rhs.num4) { cout << "Dervied move construct" << endl; }//移动构造函数
Dervied& operator=(Dervied&& rhs) //移动赋值运算符
{
Base::operator=(std::move(rhs));
num3 = rhs.num3;
num4 = rhs.num4;
cout << "Dervied move =" << endl;
return *this;
}
virtual ~Dervied()
{
cout << "Dervied destroy" << endl;
}
int num3;
int num4;
};