zoukankan      html  css  js  c++  java
  • 【旧博文】变态的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++,更爱他的变态
  • 相关阅读:
    不安装oracle客户端,用plsql连接oracle
    NaviCat Primium远程连接Oracle 11g数据库操作方法
    PLSQL DEVELOPER 使用技巧
    MyEclipse/Eclipse中properties文件中文乱码问题解决
    log4j日志的配置--Debug
    java-jpa-criteriaBuilder使用入门
    使用@CrossOrigin实现跨域请求
    Could not autowire field: private javax.servlet.http.HttpServletRequest
    java高级-泛型<T>和注解封装与使用
    TableView自动上移
  • 原文地址:https://www.cnblogs.com/ldr123/p/2389597.html
Copyright © 2011-2022 走看看