【旧博文】变态的C++

C++是编程语言中最难学的一种。
他的灵活及变态的表达方式令程序员兴奋。
如题,这里所说的变态是指 没有做不到,只有想不到。
C++最灵活的要属内存操作。
下例(例子转自CSDN):
   class In
   {
      public:
            void show(int i);
      private:
            int Information;
   };
 要求在main函数中,更改Information的值为100。
懂C++的人肯定知道,私有变量是不能被对象所访问的,但题目却让我们更改。
这就要讲讲C++中关于类的存储原理了。
类(class)相当于结构体(struct),但不完全等于。存储方式也是一样的。
他只将成员变量分配给自己的内存,而成员函数则是一类似于映射的方式存储。
这样,对于上面的类,可以完全抛弃变量所占的位置。成员变量指针就是类的头指针。
通过以上的原理,可以很轻松的写出自己的修改方法:
  int main()
  {
     In *t;
     int n = 100;
     t = (In*)&n;
     return 1;
   }
这样就可以修改t中的Information的值。是不是很变态啊。
如果是两个成员变量怎么办??
例如;
private:
 
    int i;
    int j;
要求只修改j的值为100;
根据以上讲的,可以写一个结构体来实现。
typedef struct temp
{
   int i;
   int j;
 }temp;
 
int main()
{
   temp* t = new temp;
   t->j = 100;
   In *in = (In*)&t;
    return 1;
}
这样也能够实现。前面结构体定义的i的目的其实是占位。
 
呵呵,怎么样,C++够变态把。
下面还有更变态的。
 
int main()
{
    char a[5], b[5];
    strcpy(a, "12345");
    strcpy(b, "12345");
    cout<<a<<endl<<b<<endl;
    return 1;
以上的显示结果,大家肯定能看的出来,是
12345
12345
但我将语句稍微一改
将strcpy(b, "12345");改成strcpy(b, "123456789");
再看看结果,
是不是变了
9
123456789
1、为什么一个只能容纳5个元素的数组可以容纳这么多数
2、为什么变成9个之后才发生溢出
3、为什么修改a的话不会修改b的,而修改b的会修改a的。
4、为什么将a,b的定义分两行写就不会出现溢出覆盖的问题。
这里面我只能回答几个,其他的还请高手指点。
1、不知、
2、计算机是按照8位对齐的方式来组织变量。
3、不知
4、定义写在一起,可能在同一个栈里,然后共享同一块区域,然后就有可能出现问题。
建议在定义变量时,一行只定义一个。
 
 
其实,说白了。
C++确实比较变态,太灵活了。
但这也有好处,好处甚至比坏处要多。
呵呵,努力学习把,我爱C++,更爱他的变态
posted @ 2012-03-10 22:38  ldr123  阅读(516)  评论(0编辑  收藏  举报