C++ 如何正确重载从基类到继承的转换
我想我的问题简单明了: 我有基类AbstractMatrix和它的子类Matrix,我想进行简单的转换:C++ 如何正确重载从基类到继承的转换,c++,inheritance,type-conversion,operator-overloading,overloading,C++,Inheritance,Type Conversion,Operator Overloading,Overloading,我想我的问题简单明了: 我有基类AbstractMatrix和它的子类Matrix,我想进行简单的转换: namespace mtrx { /* mycode */ class AbstractMatrix { public: /* -//- */ operator Matrix (); /* -//- */ } class Matrix : public AbstractMatrix { /* -/
namespace mtrx {
/* mycode */
class AbstractMatrix {
public:
/* -//- */
operator Matrix ();
/* -//- */
}
class Matrix : public AbstractMatrix {
/* -//- */
}
}
AbstractMatrix.cpp:
AbstractMatrix::operator Matrix(){
return Matrix(data);
}
编译器给出消息:
Matrix.h:39:12: error: expected type-specifier before ‘Matrix’
operator Matrix ();
^
我做错了什么?
有可能进行这样的转换吗?我想是的,因为我只想使构造函数基于超类,但没有任何无聊的语法,我需要它隐式
谢谢您只需提供一份转发声明: 使抽象矩阵类的矩阵可见
另外,您可能应该重新考虑您的设计,因为使用转换运算符将基类转换为派生类对我来说很奇怪。您只需提供一个转发声明: 使抽象矩阵类的矩阵可见
另外,您可能应该重新考虑您的设计,因为使用转换运算符将基类转换为派生类对我来说很奇怪。我更好奇的是,为什么需要这样做?操作员应该解决什么问题?你不能有一个返回抽象矩阵指针的虚拟getter函数吗?或者使用来了解子类?至于您的问题,您知道在使用符号之前必须声明符号,有时甚至必须定义符号?例如,对于fooMatrix A;如果我像这样做,其中B是抽象矩阵,B将被转换为矩阵类。谢谢你的建议,我最近开始学习C++,我会阅读虚拟函数和CRTP,也许它会帮助我。我更好奇为什么你需要这么做?操作员应该解决什么问题?你不能有一个返回抽象矩阵指针的虚拟getter函数吗?或者使用来了解子类?至于您的问题,您知道在使用符号之前必须声明符号,有时甚至必须定义符号?例如,对于fooMatrix A;如果我像这样做,其中B是抽象矩阵,B将被转换为矩阵类。谢谢你的建议,我最近开始学习C++,我会阅读虚拟函数和CRTP,也许它会帮助我。哦,我试着在命名空间上面做。关于设计是的,我认为你的评论是恰当的,但更多的是出于好奇为什么它不起作用,我试着在名称空间上面做。关于设计是的,我认为你的评论是恰当的,但更多的是出于好奇为什么它不起作用
namespace mtrx {
class Matrix; // <=== here
class AbstractMatrix {
public:
operator Matrix ();
};
class Matrix : public AbstractMatrix {
};
}