@kyklaed

Как унаследовать оператор = из переопределенной функции базового класса?

Привет вот код !
не могу присвоить te2 = te;
то есть объект базового класса объекту наследника. в чем моя ошибка ?

#include <iostream>
using namespace std;

class Test {
	public:
		Test(int t = 0);
		Test& operator=(const Test& tt);
		void get();

	private:
		int m_t;
};

void Test::get(){
	cout<<m_t<<endl;
}

Test::Test(int t):
	m_t(t)
	{
	}

Test& Test::operator=(const Test& tt){
	if (this == &tt)
	{
		return *this;
	}
	else
	{
		m_t = tt.m_t+2000;
		return *this;
	}
	
	
}

class Test2: public Test {
	public:
		Test2 (int tt = 0);
		Test2& operator=(const Test2& tt);
	private:
		int m_tt;
	
};

Test2::Test2(int tt):
	Test(tt)
	{
	}

Test2& Test2::operator=(const Test2& tt)
{
   if (this != &tt) 
  {
      Test::operator=(tt);
      m_tt = tt.m_tt;
   }
   return *this;
}


int main(){

	Test te(1);
	Test2 te2(10);
	te.get();
	te2.get();
	cout<<"___________"<<endl;
	te2 = te;
	
	te2.get();
	te.get();

	return 0;
}


ошибка
[Error] no match for 'operator=' (operand types are 'Test2' and 'Test')
  • Вопрос задан
  • 122 просмотра
Решения вопроса 1
Унаследовать родительский оператор можно добавив в Test2:
using Test::operator=;

Но лучше не наследовать старый оператор, а просто добавить новый в Test2:
Test2& operator=(const Test1& t);

Родительский оператор не знает ничего про m_tt и его значение после присвоения останется прежним, что чревато труднообнаружимыми ошибками.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы