把一类私用变量用指针导出在使用.如何看待这种使用方式.

yanjinbin0 2009-06-10 05:18:33
把一类私用变量用指针导出在使用.
如何看待这种使用方式.

代码如下:
先写个测试类:
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()把它当做指针导出到外面来,也可以用呢.
按道理应该不可以用的啊.
不明白啊。


...全文
39 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yanjinbin0 2009-06-11
  • 打赏
  • 举报
回复
楼上的谢了。
softist 2009-06-10
  • 打赏
  • 举报
回复
私用变量名不允许别类的直接使用是编程时的限制。
私用变量的指针是内存地址的概念,把这个地址怎么折腾都可以。
私用变量名是某个类的私有财产,内存是大家的,公家的。

在c里面,没有这种语法上的限制。
在c++里面,有语法上的限制,没有内存使用上的限制。
限制太多就不是c或c++了。变成了缺少点灵活性的语言了,比如vb.
------------
从面向对象程序设计的高度出发,要尽量不使用这样的编程方式。
yanjinbin0 2009-06-10
  • 打赏
  • 举报
回复
知道了,要在ShowA()const,加const后缀..
不过跑题了,呵呵.........................


--我这里是要问竟然是个私有数据成员,为什么可以通过指针暴露它呢.
他竟然私有的,就应该保证只能在类中使用,而在外面就算获得该类指针也是无法使用的.

yanjinbin0 2009-06-10
  • 打赏
  • 举报
回复
郁闷了加了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 &”

这是为什么啊.

wocow3 2009-06-10
  • 打赏
  • 举报
回复
CTestA* GetPtr(void){return &testA;}
成员函数是公有的
返回了一个地址,这个地址你想怎么操作就怎么操做
zhihuizhilv 2009-06-10
  • 打赏
  • 举报
回复
可以返回一个常量指针:
const CTestA* GetPtr(void){return &testA;}
这样可以禁止调用者通过该指针修改testA,同时能够访问testA。
ok1234567 2009-06-10
  • 打赏
  • 举报
回复
比用函数拷贝值访问(Setxxx,Getxxx)要高效一点吧:)
oyljerry 2009-06-10
  • 打赏
  • 举报
回复
私有成员是指:你不能够直接 testB.testA 这么来访问
oyljerry 2009-06-10
  • 打赏
  • 举报
回复
进行了地址拷贝等,通过指针来访问

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧