• C++primer 第13章 复制控制


    复制构造函数,赋值操作符,系够函数总称复制控制

    能够准确无误地编写出String类的构造函数、拷贝构造函数、赋值函数和析构函数的面试者至少已经具备了C++基本功的60%以上!
    在这个类中包括了指针类成员变量m_data,当类中包括指针类成员变量时,一定要重载其拷贝构造函数、赋值函数和析构函数
    这既是对C++程序员的基本要求,也是《Effective C++》中特别强调的条款。
    仔细学习这个类,特别注意加注释的得分点和加分点的意义,这样就具
    备了60%以上的C++基本功!

     

    复制构造函数:只有单个形参,而且该形参是对本类类型对象的引用(常用const修饰),这样的构造函数称为复制构造函数,可用于:

    1.根据另一个同类型的对象显示或隐式初始化一个对象

    2.复制一个对象,将它的作为实参传递给一个函数

    3.从函数返回时复制一个对象

    4.初始化顺序容器中的元素

    5.根据元素初始化式列表初始化数组元素

    C++初始化形式:1.直接初始化【int i(45)】;2.复制初始化:用"="

    对于类类型对象,只有指定单个实参或显示创建一个临时对象用于复制时,才使用复制初始化

    只包含类类型成员或内置类型(但不是指针类型)成员的类,无须显示定义复制构造函数,也可以复制

    禁止复制:例如IO类不允许复制。1.在private中定义复制构造函数,但是类的友元和成员仍能进行复制; 2.在private中声明复制构造函数

    重载操作符是一些函数,其名字为operator后跟着所定义的操作符的符号。

    一般复制构造函数,也跟着复制操作符

    Sales_item& Sales_item::operator=(const Sales_item &rhs)
    {
       isbn= rhs.isbn;
    units_sold =rhs.units_sold;
    return *this;
    }

    析构函数

     动态分配的对象只有在指向该对象的指针被删除时才撤销,若没删除指向动态对象的指针,则不会运行该对象的析构函数。

    当对象的引用或者指针超出作用域时,不会运行析构函数。只有在删除指向动态分配对象的指针实际对象(而不是对象的引用)超出作用域时,才会运行析构函数

    如果一个类需要析构函数,那它也需要赋值操作符和复制构造函数 --》三法则

    class Sales_item{
    public:
          //
          //
         ~Sales_item(){}
    };

    类的析构函数是成员函数,他的名字是在类名字之前加上一个~,无形参,无返回值

  • 相关阅读:
    Python基础语法—8小时入门版
    PXE服务搭建及配置
    jenkins pipeline
    Bugzilla的安装和部署
    KVM安装、配置及使用说明
    UOS虚拟显示器&VNC配置
    Sikuli-基于图像识别的自动化测试框架
    UOS(国产Linux操作系统)下使用pytest生成allure自动化测试报告
    dogtail的使用方法(二)——元素操作
    dogtail的使用方法(三)——启动应用
  • 原文地址:https://www.cnblogs.com/nkxyf/p/2512232.html
Copyright © 2020-2023  润新知