не могу вспомнить соотвественно и подобрать пример
вроде есть правило принципа вызова ->
раскрутка для внутренних обьектов
вопрос, какие есть нюансы для перегруженного оператора->
искал , но не нашёл
Здравствуйте, мухоморец, Вы писали:
М>не могу вспомнить соотвественно и подобрать пример
М>вроде есть правило принципа вызова ->
М>раскрутка для внутренних обьектов
Если он вернет указатель, либо объект, для типа которого так же перегружен оператор ->,
то:
struct A
{
int i_;
};
class B
{
public:
A * operator ->();
};
class C
{
public:
B operator ->();
};
int main()
{
C c;
c->i_ = 0;
}
М>вопрос, какие есть нюансы для перегруженного оператора->
Может вернуть и что-то еще кроме перечисленного, просто тогда не будет применяться "раскрутка для внутренних обьектов "
М>искал , но не нашёл
Здравствуйте, мухоморец, Вы писали:
М>не могу вспомнить соотвественно и подобрать пример
М>вроде есть правило принципа вызова ->
М>раскрутка для внутренних обьектов
М>вопрос, какие есть нюансы для перегруженного оператора->
М>искал , но не нашёл
#include <iostream>
class MyClass;
class Test
{
MyClass * m;
public:
Test(MyClass * M) : m(M) {}
MyClass * operator -> () { std::cout << "Test -> "; return m; }
};
class MyClass
{
public:
Test operator -> () { std::cout << "MyClass -> "; return Test(this); }
void print () { std::cout << "print"; }
};
int main()
{
MyClass m;
m->print();
}
Вывод:
Test -> MyClass -> print
Т.е. operator -> применяет -> к возвращаемому значению. Если возвращен указатель, то просто обратимся к его членам, а если объект (Test), то опять вызовется operator ->
Здравствуйте, мухоморец, Вы писали:
Кстати, иногда это применяется для обрамления доступа
class Temp
{
Native* m_ptr;
public:
Temp(Native* ptr) : m_ptr(ptr) { DoLeading1(); }
Native* operator->() const { DoLeading2(); return m_ptr; }
~Temp() { DoTrailing(); } // иным способом это не сделать без дополнительных усилий
};
class LongLife
{
.....
public:
Temp operator->() { return Temp(m_ptr); }
};
Примерно так.
... << RSDN@Home 1.2.0 alpha rev. 655>>