网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
06月23日漏签0天
c++吧 关注:620,740贴子:2,111,570
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 32回复贴,共1页
<<返回c++吧
>0< 加载中...

这个private不管用啊!class t {private

  • 只看楼主
  • 收藏

  • 回复
  • savage200
  • <<
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这个private不管用啊!
class t {
private: //
int a;
int *p;
public:
t()
{
a = 0;
p = &a;
}
int *getp() {return p;}
void printa(){printf("%d\n",a);}
~t() {}
};
int main() {
t a;
a.printa();
int *p=a.getp();
*p=250;
a.printa();
}


  • M_P_C_King
  • <
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
打回去重修,访问控制只影响名字。


2025-06-23 02:05:52
广告
  • 抬头望那苍穹
  • ==
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
哪里显示不管用了。


  • savage200
  • <<
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
只能这样改进:
const int *getp(return p;)


  • savage200
  • <<
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
不过也只能防止无意的修改。
对这种也没有办法:
int *p=(int *)a.getp();


  • M_P_C_King
  • <
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
标准库减少暴露裸指针做的努力大约你是看不见的
封装的意义在于通过仅提供接口来维持类的内部状态,都提供get了还封个蛋……你的封装仅仅是为了避免手滑写错,像隔壁java那样把一个公开数据变成私有数据再搭上set/get方法?
再说了,不提供get方法,真的就改不了了? *(int**)((int*)(&a) + 1)是什么?


  • Sunchy321
  • (int)
    16
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
你自己提供的接口,关破坏封装屁事。。


  • snjtie
  • throw
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include <iostream>
using namespace std;
class t
{
private://
int a;
int *p;
public:
t()
{
a = 0;
p = &a;
}
const int *getp()const
{
return p;
}
void printa()
{
printf("%d\n", a);
}
~t()
{
}
};
int main()
{
t a;
a.printa();
const int *p = a.getp();
*p = 250;
a.printa();
}


2025-06-23 01:59:52
广告
  • zarelaky
  • ,
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
只要有对象指针,利用c/c++的指针运算和强制类型转换,要想破坏访问控制,总会有办法的。
楼主的例子,开放的getp()接口,本身就暴露了类实现的细节,将内部数据地址暴露给外部使用,数据已经脱离了类的管控,能被外部修改也就不奇怪。
通常这是违反类设计原则的,一般来说一个类只暴露接口给外部使用,为了避免这种情况,在稍复杂一点的系统设计时,可以通过聚合、组合、提取父类等手段,将类拆分,重组,使对应数据放置到一个合适的类中进行处理。
推荐楼主看看面向对象设计相关的书,另外类设计可以看看《设计模式》和《重构改善既有代码设计》,如果仅仅是练习编程语言的特性,就当我上面的东西白说,但说实话,c/c++真不是这么玩的。


  • Baka9
  • <<
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
私有的就不要交出指针,不然又什么意义。要不就公有算了。


  • savage200
  • <<
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
但为了简化设计,不得不传递指针


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 32回复贴,共1页
<<返回c++吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示