zoukankan      html  css  js  c++  java
  • The Binding of a Data Member

    《深度探索C++对象模型》第三章“Data语意学” 

    3.1 The Binding of a Data Member

    下面一段代码的输出是什么?

    [xiaochu.yh@OceanBase cpp]$ cat member_binding.cpp 
    #include <iostream>
    using namespace std;
    
    typedef int len_t;
    
    class Point
    {
      public:
        void mum(len_t val) { _val = val; cout << _val << endl; }
      private:
        typedef float len_t;
        len_t _val;
    };
    
    int main()
    {
      Point p;
      p.mum(123.3);
      return 0;
    }
    


    答案是:123


    那么下面一段代码呢?

    [xiaochu.yh@OceanBase cpp]$ cat member_binding.cpp     
    #include <iostream>
    using namespace std;
    
    typedef int len_t;
    
    class Point2
    {
      private:
        typedef float len_t;
      public:
        void mum(len_t val) { _val = val; cout << _val << endl; }
      private:
        len_t _val;
    };
    
    
    int main()
    {
      Point2 p2;
      p2.mum(123.3);
      return 0;
    }
    

    答案是:123.3


    从上面的案例中可以知道,作为一种防御性编程风格,建议把类体中的typedef放在最前面,如例2中所示。

    还看最后一段代码,会是什么输出呢?

    [xiaochu.yh@OceanBase cpp]$ cat member_binding.cpp 
    #include <iostream>
    using namespace std;
    
    class Point
    {
      public:
        void mum(len_t val) { _val = val; cout << _val << endl; }
      private:
        typedef float len_t;
        len_t _val;
    };
    
    int main()
    {
      Point p;
      p.mum(123.3);
      return 0;
    }


    答案是:编译失败

    member_binding.cpp:7: error: ‘len_t’ has not been declared


  • 相关阅读:
    支付宝接口对接常见问题
    Myeclipse中配置安卓环境
    算法精解概述
    使用Eclipse开始Java编程
    Windows使用SSH管理Ubuntu
    大臣的旅费
    剪格子
    波动数列
    买不到的数目
    逆波兰表达式
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3000660.html
Copyright © 2011-2022 走看看