template <class T>
class A
{
T i;
public:
virtual A& operator = (const T& arg){
i = arg;
return *this;
}
};
class B : public A<int>
{ };
int main (void)
{
B Obj;
Obj = 5;
return 0;
}
[с++] перегрузка присваивания в шаблонном классе
Код:
вызовет ошибку компиляции
Цитата:
TemplateOperator.cpp: In function ‘int main()’:
TemplateOperator.cpp:23:12: error: no match for ‘operator=’ in ‘Obj = 5’
TemplateOperator.cpp:14:1: note: candidate is: B& B::operator=(const B&)
Как правильно определить в данном случае оператор присваивания в базовом классе, не переопределяя его в производном?
Код:
class B : public A<int>
{
public:
using A<int>::operator=;
};
{
public:
using A<int>::operator=;
};
Цитата: Ramon
Код:
class B : public A<int>
{
public:
using A<int>::operator=;
};
{
public:
using A<int>::operator=;
};
может я не так выразился, но ключевые слова - "не переопределяя его в производном". не хотелось бы ручками рисовать всякие юзинги во всей куче классов, вместо тех, в которых это действительно необходимо. такое возможно?
Цитата: ~ArchimeD~
может я не так выразился, но ключевые слова - "не переопределяя его в производном". не хотелось бы ручками рисовать всякие юзинги во всей куче классов, вместо тех, в которых это действительно необходимо. такое возможно?
ISO/IEC 14882:2003(E):
Цитата:
13.5.3 Assignment [over.ass]
An assignment operator shall be implemented by a non-static member function with exactly one parameter.
Because a copy assignment operator operator= is implicitly declared for a class if not declared by the user (12.8), a base class assignment operator is always hidden by the copy assignment operator of the derived class.
Может стоит попробовать объявить поле "T i" как protected?
Цитата: Ramon
ISO/IEC 14882:2003(E):
Понял, спасибо большое. придется юзать что-то вроде SetData.
Цитата: Apach47
Давно наследники имеют доступ к private-членам базового класса?
Может стоит попробовать объявить поле "T i" как protected?
Может стоит попробовать объявить поле "T i" как protected?
не суть, в реальной ситуации так и было
Цитата: Apach47
Может стоит попробовать объявить поле "T i" как protected?
Не стоит без крайней необходимости.