Рассмотрим следующие строки
std::map<char,int> mymap;
std::map<char,int>::iterator it; /* not std::map<char,int>::iterator *it; */
Во второй строке даже считалось, что он не объявлен как указатель, как к элементам обращаются с помощью оператора стрелки (->), как показано ниже.
std::cout << it->first << " => " << it->second << '\n';
Вы можете перегрузить ->
оператор для своего класса, и это точно, что здесь происходит.
Другой пример:
class Hello
{
public:
void Show()
{
printf("Hello, world!");
}
};
class MyClass
{
private:
Hello hello;
public:
Hello * operator -> ()
{
return &hello;
}
};
int main(int argc, char * argv[])
{
MyClass m;
m->Show();
}
<<
с перегрузкой оператораstd::cout
:.