C++面向对象高级编程(七)point-like classes和function-like classes
技术在于交流、沟通,转载请注明出处并保持作品的完整性。
1.pointer-like class 类设计成指针那样,可以当做指针来用,指针有两个常用操作符(*和->),所以我们必须重载这两个操作
/*简单实现一下智能指针的*与 -> 操作符*/ template <class T> class shared_ptr_test { public: T& operator* () const //重载* { return *px; } T* operator->() const //重载 -> { return px; } shared_ptr_test(T* p):px(p){}; private: T * px; //指向class的一个指针 long pn; }; struct Foo { // ... void method(void) {}; }; int main() { shared_ptr_test<Foo> sp(new Foo); Foo f(*sp); //*作用后自动销毁
//使px 指向Foo class sp->method(); //1.->作用后继续填充
//2.== f->method(); sp->method() 会转换成 px->method();即Foo::method() return 0; }
这个时候我们就可以像使用指针那样使用这个class了
2.function-like classes 类可以像函数那样使用,那我们必须重载 func operator call 即[()] 操作符
template<typename T> class lineFeed { public: void operator()(const T &x) { cout<<x<<endl; } }; int main() { int tmp[]={1,2,3,4,5}; for_each(tmp,tmp+5,lineFeed<int>()); return 0; }
输出结果
参照<<侯捷 C++面向对象高级编程>>