请教一个多态的问题
代码如下:
template<class T> class Array1d
{
...
public:
virtual Array1d<T>& operator=(const Array1d<T>& rhs) {...}
}
template<class ConcreteArray1d> class InterfacedArray1d : public virtual Array1d<typename ConcreteArray1d::EltT>
{
...
public:
virtual Array1d<EltT>& operator=(const Array1d<EltT>& rhs) {
return Array1d<ConcreteArray1d::EltT>::operator=(rhs);
}
}
template<class T, Subscript n0> class ConcreteRigidArray1d
{
...
}
template<class T, Subscript n0> class RigidArray1d : public InterfacedArray1d< ConcreteRigidArray1d<T, n0> >
{
...
public:
virtual Array1d<T>& operator=(const Array1d<T>& rhs) {
return InterfacedArray1d< ConcreteRigidArray1d<T, n0> >::operator=(rhs);
}
}
template<class T> class DualGaussianModel
{
...
public:
virtual Array1d<T>& parameters()
{
return a_values;
}
private:
RigidArray1d<T, 6> a_values;
};
main()
{
...
FormedArray1d<double> parms; //另外一个从Array1d共有派生的类
...
DualGaussianModel<double> model;
model.parameters()=parms;
//这一行不会调用自定义的Array1d<T>& Array1d<T>::operator=(const Array1d<T>& rhs),
//而是调用编译器自己合成的一个拷贝赋值函数,为什么呢?
...
}
谢谢大家了!
[解决办法]
template<typename T>class Array1d: public ConstArray1d<T>{ //...public: virtual Array1d<T>& operator=(const Array1d<T>& rhs) // 修改原先的形参类型 { ConstArray1d<T>::operator=(rhs); // 调用父类的operator= std::cout << "right here" << std::endl; return *this; }};
[解决办法]