C++类转换运算符

C++ Class Conversion Operator

本文关键字:运算符 转换 C++      更新时间:2023-10-16

我有两个类,一个是矩阵,然后是从矩阵类继承的对角矩阵。

显然,从Diagonal转换为Matrix很容易,但转换回来需要转换。

class Diagonal : public Matrix<T>
{  
  operator Matrix<T>() const;
};

存在于我的代码中,我认为应该转换它。总的来说,我有:

  Matrix<float> theMatrix(size,size);
  Diagonal<float> theDiag(size,size);
  theDiag = theMatrix;

除了转换,一切都很好,告诉我:

 no known conversion for argument 1 from ‘Matrix<float>’ to ‘const Diagonal<float>&’

有什么建议吗?谢谢

您的代码

class Diagonal : public Matrix<T>
{  
  operator Matrix<T>() const;
};

定义了从Diagonal<T>Matrix<T>的转换,而您的作业期望从Matrix<T>Diagonal<T>的转换。

你是不是打算写这个?

class Matrix<T>
{  
  operator Diagonal<T>() const;
};

现在,即使这是有效的*(我对此表示怀疑,因为它会导致循环依赖),我也不确定从语义角度来看它是否有意义并非每个矩阵都是对角矩阵,因此从矩阵转换为对角矩阵不能保留所有数据。从设计的角度来看,在这种情况下使用隐式转换是个坏主意。

*一种替代方案是将operator=(const Matrix<T>&)定义为Diagonal<T>