首页 > 代码库 > C++面向对象高级编程(七)point-like classes和function-like classes
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++面向对象高级编程>>
C++面向对象高级编程(七)point-like classes和function-like classes
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。