Наследование operator=
От: PaulV  
Дата: 31.07.02 10:10
Оценка:
Столкнулся со следущей проблемой:
template<typename _Tp>
class aa
{
        _Tp* _d;
public:

        aa& operator= (_Tp* d) { _d=d; return *this; }
};

class bb : public aa<int>
{
};

int main ()
{
        aa<int> a;
        bb              b;
        int             val = 5;

        a = &val;
        b = &val;
}


Компилятор на строке "b = &val;" естественно выдает ошибку "Could not find a match for 'bb::operator =(int *)' in function main()". Объяснение этому факту в стандарте (если я ошибаюсь — поправьте):

13.5.3 Assignment [over.ass]

1 An assignment operator shall be implemented by a non-static member
function with exactly one parameter. Because a copy assignment opera-
tor operator= is implicitly declared for a class if not declared by
the user (_class.copy_), a base class assignment operator is always
hidden by the copy assignment operator of the derived class.



Вопрос: Как это обойти? Т.е. хочется определить в базовом классе оператор присваивания, а во всех дочерних им пользоваться.

Вариант
typedef aa<int> bb;

не подходит, т.к. bb может содержать дополнительные методы.

Заранее спасибо!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.