zoukankan      html  css  js  c++  java
  • 条款5:了解C++提供的默认函数

    当我们定义一个类时,如果没有声明任何函数,那么C++编译器会默认提供4个函数:默认构造函数、复制构造函数、赋值操作符函数、析构函数,并且这些函数默认都是public且inline的。因此,当你定义如下类:

     1 class Empty
     2 {
     3     
     4 };
     5 
     6 // 等价于定义如下类:
     7 class Empty
     8 {
     9 public:
    10     Empty(){ }                              // default构造函数
    11     Empty(const Empty& rhs){ }              // copy构造函数
    12     ~Empty(){ }                             // 析构函数
    13     Empty& operator=(const Empty& rhs){ }   // copy assignment操作符
    14 };

    只有当这些函数需要被调用时,编译器才会创建它们,如下为例子:

    Empty e1;                // 调用默认构造函数,结束后调用析构函数

    Empty e2(e1);            // 调用复制构造函数

    e2 = e1;                 // 调用复制赋值操作符

     

    区分复制构造函数和赋值操作符函数:

    复制构造函数:用一个已有的对象去初始化一个正在创建的对象。

    赋值操作符函数:用一个已有的对象赋值给另一个已存在的对象。

     

    注意:

    如果一个类中含有reference或者const成员,则编译器不会提供默认的copy assignment函数。

    如果base类中的copy assignment函数被定义为private,则编译器不会为其derived类提供默认的copy assignment函数。

  • 相关阅读:
    Node.js 函数
    Node.js模块系统
    在Apache服务器上安装SSL证书
    Node.js Stream(流)--文件操作
    HTML5自带验证美化
    HTML5约束验证API
    Node.js Buffer(缓冲区)
    Python 练习:简单的购物车(二)
    Python 练习:简单的购物车
    Python 列表操作
  • 原文地址:https://www.cnblogs.com/benxintuzi/p/4527016.html
Copyright © 2011-2022 走看看