C++必备 - 构造、复制、赋值函数
注意:请逐步运行如下程序,弄清楚每一步过程
cpp
#include <iostream>
class A
{
public:
A() { std::cout << "A()" << std::endl; }
A(const A& other) { std::cout << "A(&)" << std::endl; }
A(const A&& other) { std::cout << "A(&&)" << std::endl; }
A& operator = (const A& other) { std::cout << "A(=)" << std::endl; return *this; }
};
class B: public A
{
public:
B():A() { std::cout << "B()" << std::endl; }
B(const B& other) : A(other) { std::cout << "B(&)" << std::endl; }
B(const B&& other) : A(other) { std::cout << "B(&&)" << std::endl; }
B& operator = (const B& other) { std::cout << "B(=)" << std::endl; return *this; }
};
int main()
{
B b; // 调用无参构造函数
B c(b); // 调用复制构造函数
B d = b; // 注意:这里调用的也是复制构造函数
B n(std::move(b)); // 调用B的右值版本的的复制构造函数
b = n; // 调用赋值运算符
return 0;
}
输出结果为:
cpp
A()
B()
A(&)
B(&)
A(&)
B(&)
A(&)
B(&&)
B(=)