工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 2265|回复: 8

偷窥类的内部,挑战private

[复制链接]
头像被屏蔽
发表于 2005-12-6 16:55 | 显示全部楼层 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2005-12-6 18:09 | 显示全部楼层
嗯,所以才说指针是不安全的。。。
回复

使用道具 举报

发表于 2005-12-11 18:28 | 显示全部楼层
超无聊,
C++根本就不应该有private,
就算你不刻意去读写它的private,在一般编码的时候还是很容易产生private变量可以读写的情况。
回复

使用道具 举报

发表于 2005-12-11 21:16 | 显示全部楼层
不知楼上为什么会觉得c++根本就不应该有private.

作为面向对象的一个特性-封装,private就是用来实现对对象的封装.
回复

使用道具 举报

发表于 2005-12-11 21:53 | 显示全部楼层
个人对C++了解不多。感觉上出现这种情况不是C++的问题,而可能是C++为了兼顾C语言或其他原因造成的。

再就是楼上的楼上,说private没必要,最好就详细点阐述你的观点。因为作为一种面向对象的语言,封装是其特点之一。或者你的意思是面向对象是没必要的?

顺便说下,从面向对象技术这个观点来看,感觉C++做得没有java彻底,可能是由于某些历史原因。
回复

使用道具 举报

发表于 2005-12-12 22:14 | 显示全部楼层
“在一般编码的时候还是很容易产生private变量可以读写的情况”,
这句话就是c++不应该有private的原因。
private的特性很容易就被忽略掉了。
没意义。
而且C++的firend也可以调用private变量,严重破坏了面向对象的特点。
这是我对C++的两大不满。
回复

使用道具 举报

发表于 2007-4-6 17:30 | 显示全部楼层
搜楼主的帖发现了这张帖

楼主说的并不是C++的错,是这种编码方式的错
如果这样都可以说是这种语言有问题的话
那么任何支持指针的语言都有问题:
#include  <stdio.h>
int main(){
   int *a;
  printf("%s",*a);
}

这样输出的东西是未知的,
可能是系统中某个软件的私有数据,
也可能是系统的某个数据
我可以说是这个操作系统有问题吗?

还有一点,楼主的方法 不一定能访问到类的私有成员,因为各种编译器的对象模型并不是统一的

考虑下面代码:

  1. #include <stdio.h>
  2. typedef struct{
  3.     int a;
  4.     int b;
  5. }STest;
  6. int main(){
  7.     STest a={1,2};
  8.     printf("address of a=%d\n\
  9.             address of a.a=%d\n\
  10.             address of a.b=%d\n\
  11.             point a.a = %p\n\
  12.             point a.b = %p\n\
  13.             value a.a= %d\n\
  14.             steal a.b=%d",&a,
  15.               &(a.a),
  16.               &(a.b),
  17.               a.a,
  18.               a.b,
  19.               a.a,
  20.               *(&(a.a)+1));
  21. }
复制代码

不用a.b 只要我清楚Struct 的布局,同样可以从a.a“偷”到a.b的值
但是对于c++的对象模型,是没有标准可循的,"恶意代码"(像楼主这类代码...只是我个人这样说...)就像在一个黑箱里乱摸,能摸到什么都是未知的...


或许标题改为:指针有风险,用者需谨慎  更好点...
回复

使用道具 举报

发表于 2007-4-7 01:01 | 显示全部楼层
所以JAVA才没有指针,这就原因之一了
回复

使用道具 举报

发表于 2007-4-7 02:11 | 显示全部楼层
主要还是看怎么用。。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2025-8-31 04:13

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表