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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值