C++基础易错点

  1. 拷贝构造函数:

    1. 浅拷贝,位拷贝:
      在这里插入图片描述
      假如,girlfriend是一个指针,浅拷贝会直接把指针的地址拷贝过去,后面李四的girlfriend会跟着张山的改变
    2. 自定义拷贝构造函数,要给指针分配新的地址,
      在这里插入图片描述
  • 类文件的分离
  • 实际开发中,类的定义保存在头文件中,比如Human.h
  • [类的声明文件]类的成员函数的具体实现,保存在.cpp文件中,比如Human.cpp[类的方法文件]
  • 其他文件,如果需要这个类,就包含这个类的头文件

在这里插入图片描述

  • 类的静态数据成员(只能通过对象进行调用)
    • 对象成员函数(没有static的成员函数)内部,可以直接访问“静态数据成员”
    • 类的静态成员函数(有static的成员函数)内部,可以直接访问“静态数据成员”
      • 所有的成员函数都已访问静态数据成员。
    • 类不能直接访问普通的静态成员(Human::humanCount 非法)
  • 类的静态成员函数(不属于对象,用类和对象都可以来调用)
    • 对象可以直接访问静态成员函数
    • 类可以直接访问静态成员函数(Human::getHumanCount());
    • 在类的静态成员函数(类的静态方法)内部,不能直接访问this指针和对象数据成员!
    • 在类的静态成员函数(类的静态方法)内部,只能访问类的静态数据成员
建模的常用手段 - 组合和聚合
  • 组合
    • 需求:构建一个计算机类,一台计算机,有CPU,硬盘,内存组成。CPU芯片也使用类来表示
  1. C++ 中

    1. 声明一个类的函数,提示与头文件声明不兼容 :删掉该 .cpp 中多余的声明的头文件即可。
    2. 未定义标识符string: string是标准库定义的,不需要写#include:包含 using namespace std即可;
  2. const导致的异常bug

    1. const对象,只能调用对应的const方法,类的成员函数,如果已经确定不会修改任何数据成员,那么,最好把这个成员函数,定义为const函数(在函数体的前面,参数列表的后面添加const
  3. operator=的参数问题

    1. 赋值运算符的重载,应该使用这种方式:

      Boy& operator=(const Boy &boy);
      如果定义:
      Boy& operator=(const Boy boy);   //boy是局部变量,而boy和boy1的name指向同一地址,在函数结束时,boy会调用析构函数,导致name这块内存就消失,同时boy1的name也会消失。
      有效果,但是在调用时,会执行参数的传递:
      比如:boy2 = boy1;
      就会执行: boy2.operator=(boy1);
      就会执行:  const Boy boy = boy1;
      就会执行: Boy类的赋值构造函数
      
    2. 有两个影响:
      1)浪费性能
      2)如果没有自定义的拷贝构造函数,而且这个类又有指针成员时,就会调用自动生成的拷贝构造函数,导致浅拷贝
      如果析构函数中,对这个指针指向的内存做了释放,那就导致数据损坏或崩溃!

    3. 小结:
      1)赋值运算符的重载,一定要使用引用参数
      2)如果一个类有指针成员,而且使用了动态内存分配,那么一定要定义自己的拷贝构造函数【要使用深拷贝】,避免调用自动生成的拷贝构造函数

    4. 因为自动生成的拷贝构造函数,是浅拷贝!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值