C ++类转换运算符

时间:2014-04-25 03:41:39

标签: c++ matrix operator-keyword

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

显然,从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>&’

有什么建议吗?感谢。

1 个答案:

答案 0 :(得分:0)

您的代码

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>