首页 > 代码库 > c++ data语意学

c++ data语意学

 

 

case1  :数据成员的绑定

extern float x;  
  
class Point3d  
{  
    public:  
        point3d();  
        //问题:被传回和被设定的x是哪一个x呢?  
        float X() const  
        {  
            return x;  
        }  
          
    private:  
        float x, y, z;//Point3d::X()将返回内部的x。  
};  

        在早期(2.0之前)C++的编译器上,将会指向global x object, 导致C++的两种防御性程序设计风格:    
            1、把所有的data members放在class 声明起头处,以确保正确的绑定
            2、把所有的inline functions, 不管大小都放在class声明之外

        对于 member function的argument list并不为真(同以上情况相反)。

 

 

 

-----------------------------------------------------------------

对于下面两个代码,第一个错误的,第二个是正确的

typedef int length;  
   
 class Point3d  
 {  
     public:  
         //length 将被决议为global  
         //_val将被决议为Point3d::_val  
         void mumbel(length val)  
         {      
             _val = val;  
         }  
           
         length mumble()  
         {  
             return _val;  
         }  
  
     private:  
         //导致 _val = val; return _val;不合法      
         typedef float length;  
         length _val;      
 };  
#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
typedef int length;  
   
 class base 
 {  
         
     public:  
         //length 将被决议为global  
         //_val将被决议为Point3d::_val  
         void mumbel(length val)  
         {      
             _val = val;  
         }  
           
         length mumble()  
         {  
             return _val;  
         }  
   private:  
         //导致 _val = val; return _val;不合法      
         typedef float length;  
         length _val;  


 };  
int main(){
    base ptr;
    ptr.mumbel(5);
    cout<<ptr.mumble()<<endl;;
    
    return 0;
}

预防性程序风格:请始终把“nested type 声明”放在class的起始处。

 

c++ data语意学