zoukankan      html  css  js  c++  java
  • 《C++ Primer Plus》10.3 类的构造函数和析构函数 学习笔记

    10.3.1 声明和定义构造函数
    构造函数原型:
    // constructor prototype with some default arguments
    Stock(const string &co, long n = 0, double pr = 0.0);
    构造函数定义:
    // constructor definition
    Stock::Stock(const string & co, long n, double pr)
    {
        company = co;
        if (n < 0)
        {
            std::cout << "Number of shares can't be negative; "
                      << company << " shares set to 0. ";
            shares = 0;
        }
        else
            shares = n;
        share_val = pr;
        set_tot();
    }
    10.3.2 使用构造函数
    C++提供了两种构造函数来初始化对象的方式。第一种方式是显式地调用构造函数:
    Stock food = Stock("World Cabbage", 250, 1.25);
    另一种方式是隐式地调用构造函数:
    Stock garment("Furry Mason", 50, 2.5);
    这种格式更紧凑。
    一般来说,使用对象来调用方法:
    stock1.show();    // stock1 object invokes show() method
    单无法使用对象来调用构造函数,因为在构造函数构造出对象之前,对象是不存在的。因此构造函数被用来创建对象,而不是通过对像来调用。
    10.3.3 默认构造函数
    Stock::Stock()
    为类提供了构造函数后,程序员就必须为它提供默认构造函数。
    如果提供了非默认构造函数,单没有提供默认构造函数,则下面的声明将出错:
    Stock stock1;    // not possible with curent constructor
    定义默认构造函数的方式有两种。一种是给已有构造函数的所有参数提供默认值:
    Stock(const string & co = "Error", int  n = 0, double pr = 0.0);
    另一种方法是通过函数重载来定义另一个构造函数——一个没有参数的构造函数:
    Stock();
    由于只能有一个默认构造函数,因此不要同时采用这两种方式。
    使用上述任何一种方式(没有参数或所有参数都有默认值)创建了默认构造函数后,便可以声明对象变量,而不对它们进行初始化:
    Stock first;        // calls default constructor implicitly
    Stock first = Stock();    // calls it explicitly
    Stock *prelief = new Stock;    // calls it implicitly
    10.3.4 析构函数
    用构造函数创建对象后,程序负责跟踪该对象,直到其过期为止。对象过期时,程序将自动调用析构函数。
    析构函数完成清理工作,因此实际上很有用。凌辱,如果构造函数使用new来分配内存,则析构函数将使用delete来释放这些内存。
    析构函数原型:
    ~Stock();
    析构函数定义:
    Stock::~Stock()
    {
        cout << "Bye, " << company << "! ";
    }
    什么时候应调用析构函数由便器已决定,通常不应在代码中显示地调用析构函数。
    如果创建的是静态存储类对象,则其析构函数将在程序结束时自动被调用。
    如果创建的是自动存储类对象,则其析构函数将在程序执行完代码块时(该对象是在其中定义的)自动被调用。
    如果对像是通过new来创建的,则它将驻留在栈内存或自由存储区中,当使用delete来释放内存时,其析构函数将自动被调用。
    10.3.5 改进Stock类
    ……
    10.3.6 构造函数和析构函数小结
    ……


  • 相关阅读:
    C++下载数据至.map/.txt/.list文件
    Byte数组转浮点数
    linux下进程的最大线程数、进程最大数、进程打开的文件数
    linux后台程序开发常用工具
    linux下csv导出文件中文乱码问题
    50个高端大气上档次的管理后台界面模板(转)
    如何注册.net 的类库dll 为com组件(转)
    vue页面信息
    CSS特效
    Css样式
  • 原文地址:https://www.cnblogs.com/moonlightpoet/p/5654423.html
Copyright © 2011-2022 走看看