dy.f 发表于 2005-12-6 16:55

wool王 发表于 2005-12-6 18:09

嗯,所以才说指针是不安全的。。。

用程序诠释生命 发表于 2005-12-11 18:28

超无聊,
C++根本就不应该有private,
就算你不刻意去读写它的private,在一般编码的时候还是很容易产生private变量可以读写的情况。

hjack 发表于 2005-12-11 21:16

不知楼上为什么会觉得c++根本就不应该有private.

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

wool王 发表于 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++的两大不满。

iptton 发表于 2007-4-6 17:30

搜楼主的帖发现了这张帖

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

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

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

考虑下面代码:

#include <stdio.h>
typedef struct{
    int a;
    int b;
}STest;
int main(){
    STest a={1,2};
    printf("address of a=%d\n\
            address of a.a=%d\n\
            address of a.b=%d\n\
            point a.a = %p\n\
            point a.b = %p\n\
            value a.a= %d\n\
            steal a.b=%d",&a,
            &(a.a),
            &(a.b),
            a.a,
            a.b,
            a.a,
            *(&(a.a)+1));
}

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


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

血狼神 发表于 2007-4-7 01:01

所以JAVA才没有指针,这就原因之一了

hjack 发表于 2007-4-7 02:11

主要还是看怎么用。。。。
页: [1]
查看完整版本: 偷窥类的内部,挑战private