zoukankan      html  css  js  c++  java
  • 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++面向对象高级编程>>

  • 相关阅读:
    spring security注解(1)
    替换localhost:8080(假域名,本地使用)
    java线程
    总结正则表达式
    试卷袋封面打印项目总结--重构项目总结
    试卷袋封面打印项目总结--兼容处理
    05 http状态码
    01HTTP的前世今生
    人人都看得懂的正则表达式教程
    Chrome 开发者工具(DevTools)中所有快捷方式列表
  • 原文地址:https://www.cnblogs.com/LearningTheLoad/p/7355619.html
Copyright © 2011-2022 走看看