zoukankan      html  css  js  c++  java
  • 读书笔记_Effective_C++_条款二十三:宁以non-member、non-friend替换member函数

    有下面一种情况

        class A
        {
        private:
            int a;
            int b;
        public:
            A(int x, int y) :a(x), b(y){}
            void a_display(){ cout << a << endl; }
            void b_display(){ cout << b << endl; }
        };

    你想输出全部的时候

    member函数情况

    void display(){cout<<a<<b<<endl;}

    non-member

    void display(A& a)
    {
        a.a_display();
        a.b_display():
    }

    根据面向对象编程原则,数据和对象捆绑在一起

    可能有违你的认知,应该使用non-member函数的形式

    因为member对封装的冲击非常大,它可以直接调用里面的成员变量。暂时看上去它很简单,但不妨碍它以后变得膨胀。

    与类内的关联,逻辑上看,这个函数就是类内函数的组合,放在类外会降低类的内聚性。

    但书上向我们介绍了namespace的方法

        using namespace std;
        class A
        {
        private:
            int a;
            int b;
        public:
            A(int x, int y) :a(x), b(y){}
            void a_display(){ cout << a << endl; }
            void b_display(){ cout << b << endl; }
        };
        void display( A& a)
        {
            a.a_display();
            a.b_display();
        }

    我还是第一次用

    语法

        A::A a(1, 3);
        A::display(a);
  • 相关阅读:
    RabbitMQ安装
    基于Linux的校园网破解思路和方法
    网络-0001-常见传输介质
    友情链接
    linux简史
    计算机的发展简史
    ArrayList&LinkedList&Vector区别
    Adobe Flash Player PPAPI 32.0.0.330
    ntoskrnl.exe导致蓝屏解决方法
    Git常用命令
  • 原文地址:https://www.cnblogs.com/vhyc/p/5596668.html
Copyright © 2011-2022 走看看