码迷,mamicode.com
首页 > 编程语言 > 详细

C++面向对象高级编程(七)point-like classes和function-like classes

时间:2017-08-14 10:17:01      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:简单实现   侯捷   image   template   eth   编程   高级   输出   span   

技术在于交流、沟通,转载请注明出处并保持作品的完整性。


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

标签:简单实现   侯捷   image   template   eth   编程   高级   输出   span   

原文地址:http://www.cnblogs.com/LearningTheLoad/p/7355619.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!