初始化vc类私有数据成员


   1: class CStr
   2: {
   3:   private:
   4:     char *pData;
   5:     int nLength;
   6:   public:
   7:     char *get(void);
   8:     int  getlength(void);
   9:     void cpy(char *s);
  10:     void cat(char *s);
  11: };

 

一开始我声明一个字符串操作类如上

cpy这个函数的声明如下

   1: void CStr::cpy( char *s )
   2: {
   3:     int n;
   4:     n=strlen(s);
   5:  
   6:     if(nLength!=n)
   7:     {
   8:         if(pData)
   9:         {
  10:             delete[]pData;     <--报错1
  11:         }
  12:         pData=new char[n+1];
  13:         nLength=n;
  14:     }
  15:     strcpy(pData,s);
  16: }

 

发现pData这个指针指向0xccccccc,所以if(pData)恒成立,因为>0

再看应用层声明

   1: int _tmain(int argc, _TCHAR* argv[])
   2: {
   3:     CStr Mystr;//声明对象
   4:     
   5:     Mystr.pData=0;  <--初始化pdata成员数据,但是报错2
   6:     Mystr.cpy("Copy string2Arr!");
   7:     puts(Mystr.get());
   8:  
   9:     Mystr.cat("Add String2Str!");
  10:     puts(Mystr.get());
  11:  
  12:     printf("the sDatalen=%d \n",Mystr.getlength());
  13:     system("pause");
  14:     return 0;
  15: }

 

我在上面初始化pdata报错,原来我们的数据成员pData是private,是私有成员,外部不能直接访问的

到现在我们发现问题所在,

1.报错1是因为我们没有初始化数据成员

2.报错2是因为我们想在外部初始化私有的数据成员

 

解决方案就是在public里面初始化私有的成员数据

   1: class CStr
   2: {
   3:   private:
   4:     char *pData;
   5:     int nLength;
   6:   public:
   7:     CStr()
   8:     {
   9:       pData = 0;   <--初始化pData数据成员
  10:     }
  11:     char *get(void);
  12:     int  getlength(void);
  13:     void cpy(char *s);
  14:     void cat(char *s);
  15: };

到现在报错问题彻底解决

posted @ 2011-12-17 22:14  sudigua  阅读(390)  评论(0编辑  收藏  举报