Skip to content

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(=)

上次更新于: