把一类私用变量用指针导出在使用.
如何看待这种使用方式.代码如下:
先写个测试类:
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()把它当做指针导出到外面来,也可以用呢.
按道理应该不可以用的啊.
不明白啊。
如何看待这种使用方式.代码如下:
先写个测试类:
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()把它当做指针导出到外面来,也可以用呢.
按道理应该不可以用的啊.
不明白啊。
const CTestA* GetPtr(void){return &testA;}
这样可以禁止调用者通过该指针修改testA,同时能够访问testA。
成员函数是公有的
返回了一个地址,这个地址你想怎么操作就怎么操做
代码如下:
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 &”这是为什么啊.
不过跑题了,呵呵.........................
--我这里是要问竟然是个私有数据成员,为什么可以通过指针暴露它呢.
他竟然私有的,就应该保证只能在类中使用,而在外面就算获得该类指针也是无法使用的.
私用变量的指针是内存地址的概念,把这个地址怎么折腾都可以。
私用变量名是某个类的私有财产,内存是大家的,公家的。在c里面,没有这种语法上的限制。
在c++里面,有语法上的限制,没有内存使用上的限制。
限制太多就不是c或c++了。变成了缺少点灵活性的语言了,比如vb.
------------
从面向对象程序设计的高度出发,要尽量不使用这样的编程方式。