Итак, я пытаюсь создать класс шаблонов для учебного проекта по теории и логике групп. У меня есть класс:Перегрузка операторов классов шаблонов C++
#pragma once
#include <iostream>
#include <assert.h>
using namespace std;
template <class T>
class CSet
{
private:
T* arr;
int size;
protected:
public:
/*Constructors & Destructor*/
CSet(int s = 0, T* a = NULL); //Default constructor
CSet(const CSet<T> & obj_input); //Copy constructor
~CSet() { delete[] arr; } //Destructor
/*Operators Overloading*/
const CSet<T>& operator=(const CSet<T>& obj_input); // = overloading
const CSet<T>& operator+=(const T& val_input); // += overloading
const CSet<T>& operator-=(const T& val_input); // -= overloading
/*Logic Operators Overloading*/
const CSet<T>& operator|(const CSet<T>& obj_input);
const CSet<T>& operator&(const CSet<T>& obj_input);
const CSet<T>& operator-(const CSet<T>& obj_input);
bool operator==(const CSet<T>& obj_input);
bool operator!=(const T& val_input);
bool operator>(const CSet<T>& obj_input);
const CSet<T>& operator^(const CSet<T>& obj_input);
//void DifWrite(const CSet<T>& obj_input); //does - and outputs to file
friend ostream& operator<<(ostream& op, const CSet<T>& input) {
for (int i = 0; i < input.size; i++)
{
op << input.arr[i] << " ";
}
return op;
}
};
и я пытаюсь сделать | оператора для имитации логической функции ИЛИ. Это означает, что если я сделаю A = {1,2,3} и B = {3,4,5}, то A | B = {1,2,3,4,5}, который является новым объектом. Однако я не могу расшифровать, как выделить память для нового объекта и вернуть его. Функция я в настоящее время меняется «это» вместо возврата нового объекта:
template <class T>
const CSet<T>& CSet<T>::operator|(const CSet<T>& obj_input) {
if (!arr)
{
*this = obj_input;
return *this;
}
else if (!obj_input.arr)
{
return *this;
}
else
{
for (int i = 0; i < size; i++)
{
temp += this->arr[i];
}
for (int i = 0; i < obj_input.size; i++)
{
temp += obj_input.arr[i];
}
*this = temp;
}
return *this;
}
Вы делаете это неправильно: Ваши операторы бинарные операторы, которые должны возвращать a 'CSet'. Мутирующие бинарные операторы: @ =, которые должны возвращать 'CSet &'. –