|
|
|
| #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.
Кто может помогите разобраться!!! | |
|
|
|
|
|
|
|
для: nkv24
(22.04.2009 в 02:10)
| | перегрузи оператор + в дочернем классе и будет нормально
(B+A) возвращает ссылку на vectorn, а родительсий класс не может привестись к дочернему, так как при сложении произошла так называемая "срезка".
И еще
надо записать как
а то получается, что вместо сложения в результ пишется удвоенное значение второго операнда
PPS Перегружая таким образом оператор + вы нарушаете привычную логику кода, выражение C = B + A изменит и операнд B, что обычно не делается. | |
|
|
|
|
|
|
|
для: GeorgeIV
(22.04.2009 в 11:04)
| | Вот такой вариант работает логично, не изменяя операнды
#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)
{
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;
} |
| |
|
|
|