Skip to content

Instantly share code, notes, and snippets.

@sillykelvin
Created November 19, 2013 16:22
Show Gist options
  • Save sillykelvin/7547975 to your computer and use it in GitHub Desktop.
Save sillykelvin/7547975 to your computer and use it in GitHub Desktop.
The example of member access operator -> overloading.
#include <iostream>
struct Origin {
int a;
};
struct Wrapper {
Origin *orig;
Origin *operator->() const {
return orig;
}
};
struct Wrapper2 {
Wrapper *wrap;
Wrapper& operator->() const {
return *wrap;
}
};
int main() {
Origin o;
o.a = 7;
Wrapper w;
w.orig = &o;
Wrapper2 w2;
w2.wrap = &w;
std::cout << "w->a" << "\t\t\t\t" << w->a << std::endl;
std::cout << "w.operator->()" << "\t\t\t" << w.operator->() << std::endl;
std::cout << "w.operator->()->a" << "\t\t" << w.operator->()->a << std::endl;
std::cout << "w2->a" << "\t\t\t\t" << w2->a << std::endl;
std::cout << "&w2.operator->()" << "\t\t" << &w2.operator->() << std::endl;
std::cout << "w2.operator->()->a" << "\t\t" << w2.operator->()->a << std::endl;
std::cout << "w2.operator->().operator->()" << "\t" << w2.operator->().operator->() << std::endl;
std::cout << "w2.operator->().operator->()->a" << "\t" << w2.operator->().operator->()->a << std::endl;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment