Недавно начал изучать перегрузку операторов. Пытаюсь перегрузить оператор *
как пересечение множеств, но не могу понять как в данном случае обратиться к левому объекту.
template <class T>
class Set
{
public:
T ch;
set <T> cs; //создаем множество
Set()
{
int n;
T temp;
cout << "Количество элементов множества";
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> temp;
cs.insert(temp);
}
}
template <class T>void operator * (Set <T> second)
{
//Как обратиться к first?
second.Print();
}
void Print()
{
set <T>::iterator ik;
for (ik = cs.begin(); ik != cs.end(); ++ik)
cout << *ik << " ";
cout << endl;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL,"ru");
Set<char>first;
first.Print();
first = first + 'd';
first.Print();
Set<char>second;
second.Print();
first*second;
system("pause");
return 0;
}
Указатель на него - this
, ссылка - *this
...
Это же просто ваш объект, членом которого является оператор.
И еще - скажите, а где вы намерены хранить результат пересечения множеств? Ваш оператор не возвращает ничего, так что у вас возможна просто запись
Set1 * Set2;
И где будет пересечение - в Set1
или в Set2
?
Кстати, поскольку у вас оператор получает объект по значению, Set2
просто копируется. Это вам точно надо?
Может, логичнее было бы
Set operator*(const Set& s1, const Set& s2)
Именно так - не член класса, а свободная функция? (шаблонность для краткости я опустил)
Опять же, вы так вольно обошлись с шаблоном внутри шаблона, что не удивлюсь, если вы вскоре будете задавать новые вопросы по поводу вашего кода...
Имеется несколько способов. Во-первых, вы можете вызвать функцию-член класса, используя неквалифицированное имя. Например,
Print();
Во-вторых, вы можете использовать указатель this. Например,
this->Print();
Имейте в виду, что возвращаемый тип оператора * void
не имеет смысла. Так как этот оператор вы хотите перегрузить для операции пересечения множеств, то он должен возвращать множество, соответствующее пересечению.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Архивы форматов rar,zip, необходимо: распаковывать архив, получать определенный фаил из архива, получать древо каталогов и список всех файлов...
Я новичок в этой темеХотел попробовать сделать одновременную работу нескольких функций
Следует ли объявлять деструктор производного класса виртуальным, если в базовом классе он уже помечен таковым? Те
ЗдравствуйтеНеобходимо написать калькулятор систем счисления с возможностью сложения, вычитания и умножения цифр