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++面向对象高级编程>>

 

posted @ 2017-08-14 01:05  WangZijian  阅读(308)  评论(0编辑  收藏  举报