复制构造函数而不是Operator =

时间:2017-03-31 14:22:39

标签: c++ c++11 matrix operator-overloading copy-constructor

我正在尝试使用Matrix进行简单的练习,我想实现此操作:矩阵a,矩阵b,矩阵c(a),矩阵d = a,矩阵e = a + b。目前我保持简单,但后来我想做同样的事情,但动态分配,后来智能指针。

我声明了一个显式的复制构造函数,我重载了operator =,我还声明了一个析构函数,所以我有三个规则。

以下是我的功能:

Matrix& Matrix::operator=(const Matrix& opEven)
{
    std::cout << "Operator = " << std::endl;
    for (int i = 0; i < ORD; i++)
    {
        for (int j = 0; j < ORD; j++)
        {
            arr1[i][j] = opEven.arr1[i][j];
        }
    }

    return *this;
}

Matrix::Matrix(const Matrix& obj) 
{
    std::cout << "Constructing matrix using copy c-tor." << std::endl;
    for (int i = 0; i < ORD; i++)
    {
        for (int j = 0; j < ORD; j++)
        {
            arr1[i][j] = obj.arr1[i][j];
        }
    }
}

问题在于,当我尝试使用Matrix d = a时,我的编译器使用复制构造函数,而不是我的operator =。

Output:

1 个答案:

答案 0 :(得分:2)

当您将其称为

Martix a;
Matrix b = a; 

它总是使用复制构造函数。试试这个:

Matrix a;
Matrix b:
b = a;

基本上,Matrix a = b;Matrix a(b);是相同的,因为您使用矩阵a 构建矩阵b,因此导致复制构造函数调用。