Форум: Форум C++Разное
Новые темы: 00
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: проблема с перегрузкой

Сообщения:  [1-3] 

 
 автор: GeorgeIV   (22.04.2009 в 13:03)   письмо автору
 
   для: GeorgeIV   (22.04.2009 в 11:04)
 

Вот такой вариант работает логично, не изменяя операнды
#include "stdio.h"

class vectorn
{
  protectedint dim;
  public:
  vectorn();
  vectorn operator+(const vectorn&);
  vectorn &operator=(const vectorn&);
};

vectorn::vectorn()
{
  dim=4;
}

vectorn vectorn::operator +(const vectorn &A)

vectorn B;
    B.dim = this->dim+A.dim;
return B;
}

vectorn& vectorn::operator=( const vectorn& A)
{
  if(this == &A) return *this;
  dim=A.dim;
  return *this;
}


class vector:public vectorn
{
  public:
    vector();
    vector operator+(const vector &A);
    vector &operator=(const vector&);
};

vector::vector()
{
   dim=3;
}

vector vector::operator +(const vector &A)

vector B;
B.dim = this->dim + A.dim;
return B;
}

vector& vector::operator=( const vector& A)
{
  if(this == &A) return *this;
  dim=A.dim;
  return *this;
}

int main()
{
  vector C,B,A;

  C = B + A;
  return 0;
}

  Ответить  
 
 автор: GeorgeIV   (22.04.2009 в 11:04)   письмо автору
 
   для: nkv24   (22.04.2009 в 02:10)
 

перегрузи оператор + в дочернем классе и будет нормально
(B+A) возвращает ссылку на vectorn, а родительсий класс не может привестись к дочернему, так как при сложении произошла так называемая "срезка".

И еще
dim=A.dim+A.dim;

надо записать как
dim = dim + A.dim;

а то получается, что вместо сложения в результ пишется удвоенное значение второго операнда

PPS Перегружая таким образом оператор + вы нарушаете привычную логику кода, выражение C = B + A изменит и операнд B, что обычно не делается.

  Ответить  
 
 автор: nkv24   (22.04.2009 в 02:10)   письмо автору
 
 

#include "stdio.h"

class vectorn
{
protected: int dim;
public:
vectorn();
vectorn operator+(const vectorn&);
vectorn &operator=(const vectorn&);
};
vectorn::vectorn()
{
dim=4;
}
vectorn vectorn::operator +(const vectorn &A)
{
dim=A.dim+A.dim;
return *this;
}

vectorn& vectorn::operator=(const vectorn& A)
{
if(this == &A) return *this;
dim=A.dim;
return *this;
}
class vector:public vectorn
{
public:
vector();
};
vector::vector()
{
dim=3;
}


int main()
{
vector C,B,A;
C=B+A;
return 0;
}

VS пишет: error при попытке сопоставить список аргументов '(vector, vectorn)'
Писал конструктор вида vector(const vectorn&); помогает,но не надолго, почему-то пропадает доступ к переменным класса vectorn объявленных как protected.
Кто может помогите разобраться!!!

  Ответить  

Сообщения:  [1-3] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования