Недавно начал изучать перегрузку операторов. Пытаюсь перегрузить оператор * как пересечение множеств, но не могу понять как в данном случае обратиться к левому объекту.
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 не имеет смысла. Так как этот оператор вы хотите перегрузить для операции пересечения множеств, то он должен возвращать множество, соответствующее пересечению.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости