Недавно начал изучать перегрузку операторов. Пытаюсь перегрузить оператор *
как пересечение множеств, но не могу понять как в данном случае обратиться к левому объекту.
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
не имеет смысла. Так как этот оператор вы хотите перегрузить для операции пересечения множеств, то он должен возвращать множество, соответствующее пересечению.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Архивы форматов rar,zip, необходимо: распаковывать архив, получать определенный фаил из архива, получать древо каталогов и список всех файлов...
Я новичок в этой темеХотел попробовать сделать одновременную работу нескольких функций
Следует ли объявлять деструктор производного класса виртуальным, если в базовом классе он уже помечен таковым? Те
ЗдравствуйтеНеобходимо написать калькулятор систем счисления с возможностью сложения, вычитания и умножения цифр