Я поставил перед собой цель перегрузить operator+
(добавление объектов класса). Оказывается, эту сумму можно просто интерпретировать как сумму двух векторов. Но когда дело доходит до метода operator+
, мне трудно вернуть объект. Я читал похожие темы и даже пытался применить некоторые предложения, но, к сожалению, безуспешно. Я прилагаю некоторые из моего кода.
template<class Y>
class myVect {
public:
myVect(int n = 1);
~myVect();
myVect(const myVect& a);
myVect& operator= (const myVect&);
myVect& operator+ (const myVect&);
void display(const myVect& a);
private:
int size;
Y* data;
template<class U> friend class myClass;
};
template<class Y> // constructor
myVect<Y>::myVect(int n) {
size = n;
data = new Y[size];
cout << endl << "Pass the elements" << " " << size << "\n";
for (int i = 0; i < size; i++) {
cin >> *(data + i);
}
}
template <class Y> // deconstructor
myVect<Y> :: ~myVect() {
delete[] data;
}
template<class Y> // copy constructor
myVect<Y> ::myVect(const myVect & a) {
size = a.size;
data = new Y[size];
for (int i = 0; i < size; i++) {
*(data + i) = *(a.data + i);
}
}
template<class Y> //ASSIGMENT OPERATOR
myVect<Y> & myVect<Y> :: operator= (const myVect<Y> & a) {
if (this != &a) {
delete[] data;
size = a.size;
data = new Y[size];
for (int i = 0; i < size; i++) {
*(data + i) = *(a.data + i);
}
}
return *this;
}
Оператор метода + является следующим:
template<class Y>
myVect<Y>& myVect<Y> ::operator+ (const myVect<Y>& a) {
if (this->size != a.size) {
cout << endl << "not able to perform that operation - wrong dimensions" << endl;
}
else {
myVect<Y> newObj(this->size);
for (int i = 0; i < this->size; i++) {
*(newObj.data + i) = *(this->data + i) + *(a.data + i);
}
}
return newObj;
}
Я получаю ошибку 'newObj': идентификатор не найден. Я считаю, что это из-за деконструктора. Я попытался поместить класс myVect
в новый класс (инкапсулировать его) и создать метод return, но он ничего не изменил - тип ошибки все тот же. Вы знаете, как решить эту проблему?
В любом случае, если это ошибка деструктора, означает ли это, что newObj
удаляется до ее возврата?