把一类私用变量用指针导出在使用.
如何看待这种使用方式.代码如下:
先写个测试类:
class CTestA
{
public:
   CTestA(void){iTmp = 0;}
   virtual ~CTestA(void);
   void ShowA(void){std::cout<<"iTmp ="<<iTmp<<std::endl;}
   int iTmp;
};在写个把上面类当作私用成员来使用类:
class CTestB
{
public:
   CTestB(void);
   virtual ~CTestB(void);
   void ShowB(void){testA.ShowA();}
   CTestA* GetPtr(void){return &testA;}  /*把私用数据成员导出*/
private:
   CTestA testA;
};在main()中使用
  CTestA *pTestA;
  CTestB testB;
  pTestA = testB.GetPtr();   /*获取私用数据成员指针*/
  pTestA->iTmp = 111;
  pTestA->ShowA();           /*调用指针方法-输出111*/
  testB.ShowB();             /*在调用类方式,看输出方式是否一致-输出111*/私用数据成员不定义为只能在类中使用吗?但为什么GetPtr()把它当做指针导出到外面来,也可以用呢.
按道理应该不可以用的啊.
不明白啊。

解决方案 »

  1.   

    私有成员是指:你不能够直接 testB.testA 这么来访问
      

  2.   

    比用函数拷贝值访问(Setxxx,Getxxx)要高效一点吧:)
      

  3.   

    可以返回一个常量指针:
    const CTestA* GetPtr(void){return &testA;} 
    这样可以禁止调用者通过该指针修改testA,同时能够访问testA。
      

  4.   

    CTestA* GetPtr(void){return &testA;}
    成员函数是公有的
    返回了一个地址,这个地址你想怎么操作就怎么操做
      

  5.   

    郁闷了加了const这个限制导致出错了:
    代码如下:
    CTestB 修改
     const CTestA* GetPtr(void){return &testA;}  在main中
      CTestB testB; 
      const CTestA *pTestA = testB.GetPtr();  /*获取常量指针*/ 
     // pTestA->iTmp = 111; 
      pTestA->ShowA();          /*调用指针方法-输出111*/ 编译出错:error C2662: “CTestA::ShowA” : 不能将“this”指针从“const CTestA”转换为“CTestA &”这是为什么啊.
      

  6.   

    知道了,要在ShowA()const,加const后缀..
    不过跑题了,呵呵.........................
    --我这里是要问竟然是个私有数据成员,为什么可以通过指针暴露它呢.
    他竟然私有的,就应该保证只能在类中使用,而在外面就算获得该类指针也是无法使用的.
      

  7.   

    私用变量名不允许别类的直接使用是编程时的限制。
    私用变量的指针是内存地址的概念,把这个地址怎么折腾都可以。
    私用变量名是某个类的私有财产,内存是大家的,公家的。在c里面,没有这种语法上的限制。
    在c++里面,有语法上的限制,没有内存使用上的限制。
    限制太多就不是c或c++了。变成了缺少点灵活性的语言了,比如vb.
    ------------
    从面向对象程序设计的高度出发,要尽量不使用这样的编程方式。