• c++细节--section1


    1.register声明的变量为寄存器变量,因此没有地址,不能对它取地址操作。

    2.【用错sizeof】当数组作为函数参数传递时,数组会退化为同类型的指针。

    3.每个成员在成员初始化列表中只能出现一次,初始化的顺序不是由名字在初始化列表中的顺序决定,而是由成员在类中被声明的顺序决定。

    /******************point.h****************/
    class point
    {
       private:
            int xPos;
            int yPos;
       public:
            point(int x):xPos(x),yPos(xPos)
            {}
            void print()
           {
               cout<<"xPos:  "<<xPos<<",  yPos"<<yPos<<endl;
           }
    }
    /**********************main.c***************/
    #include "point.h"
    int main()
    {
         point pt1(3);
         pt1.print();
         return 0;
    }

    输出结果如下:

    xPos:  3,  yPos:  -858993460

    从结果来看,yPos没有像预期初始为3,这是因为yPos排在xPos前面,因此“yPos(xPos)”先被执行,“xPos(x)”后被执行。

    4.默认复制构造函数带来的问题

    当复制成员涉及动态内存时,复制的两个对象中变量都指向了同一个内存块,可是,两个指针对象撤销有先后,一旦一个对象被撤销,另一个便成了“野指针”,使用该指针再次释放同一动态内存单元会引发内存错误。解决方法是:显示定义复制构造函数(为新对象开辟新的动态内存);

    5.const和引用型数据成员只能通过成员初始化表达式进行初始化。

    class point
    {
         private:
              const int xPos;
              const int yPos;
        public:
           /*
            point(int x,int y)         //错误!!无法直接复制
            {
                xPos = x;
                yPos = y;
            }
          */
            point(int x,int y):xPos(x),yPos(y)  //const数据成员只能在初始化列表中初始化
            {
            }
           ...
    }

    6.const与成员函数

    类型  函数名(参数列表)  const
    {
          函数体
    }

    const成员函数表示该成员函数只能读取类数据成员,而不能修改类数据成员。

    const对象只能被创建,撤销以及只读访问,不能改写。

  • 相关阅读:
    koa mog
    sdl
    基于WindowImplBase 更简单 以及 可变大小的,才是标准的
    df
    ffplay vc
    开源1bo
    react学习前一部分
    0514 react路由
    nodejs 调用进程
    Ubuntu Linux, 不要弄什么 wine,龙井 或者什么等 QQ 了。
  • 原文地址:https://www.cnblogs.com/wlzy/p/5898021.html
Copyright © 2020-2023  润新知