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对象只能被创建,撤销以及只读访问,不能改写。

 

posted @   ZYVV  阅读(415)  评论(0编辑  收藏  举报
编辑推荐:
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
阅读排行:
· 本地部署 DeepSeek:小白也能轻松搞定!
· 如何给本地部署的DeepSeek投喂数据,让他更懂你
· 从 Windows Forms 到微服务的经验教训
· 李飞飞的50美金比肩DeepSeek把CEO忽悠瘸了,倒霉的却是程序员
· 超详细,DeepSeek 接入PyCharm实现AI编程!(支持本地部署DeepSeek及官方Dee
点击右上角即可分享
微信分享提示