首页 > 其他 > 详细

类的构造和析构

时间:2019-12-03 03:09:39      阅读:72      评论:0      收藏:0      [点我收藏+]

类的构造和析构

  • 类对象不能用列表初始化是因为数据访问状态为私有。
  • 如果将访问状态改为公有,那么就可以使用大括号初始化的方法。但是违背了数据隐藏的初衷。
  • 声明和定义构造函数
    • 声明,其中可以包含默认参数
    • Stock(const string & co, long n = 0, double pr = 0.0);
    • 定义
    • Stock::Stock(const string & co, long n, double pr)
    • {
    • ...
    • }
    • 为避免成员名和参数名混乱,常见的做法是在成员名前加m_前缀或加_后缀。
  • 使用构造函数
    • c++提供两种使用构造函数来初始化对象的方式。第一种是显式的调用构造函数。
    • Stock food = Stock("yang", 29, 1.2);
    • 另一种是隐式的调用
    • Stock food("yang", 29, 2.1);
    • 使用new分配内存时,c++都使用构造函数。在这种情况下,该对象没有名字,但可以使用指针来管理对象。
    • Stock *food = new Stock("yang", 29, 1.2);
  • 默认构造函数
    • 默认构造函数是在未提供显式初始值时,用来创建对象的构造函数。
    • Stock food;
    • 当且仅当没有定义构造函数时,编译器才会提供默认构造函数。
    • 为类定义了构造函数后,就必须提供默认构造函数。否则该声明会出错。Stock food;
    • 定义默认构造函数的方式有两种
      • 一种是给已有的构造函数所有参数提供默认值。
      • Stock(const string& co = "yang", int n = 0, double pr = 0.0);
      • 另一种方式是通过函数重载来定义另一个构造函数。一个没有参数的构造函数
      • Stock();
      • 由于只能有一个默认构造函数,因此不要同时采用这两种方式。通常应该初始化所有的成员。
  • 析构函数
    • 对象过期时,程序将自动调用一个特殊的成员函数。析构函数该函数将完成所有的清理工作。
    • 如果创建的是静态存储类对象,则其析构函数将在程序结束时自动被调用。
    • 如果创建的是自动存储类对象,析构函数将在程序执行完代码块时自动被调用。
    • 如果对象通过new创建,则它将驻留在栈内存或自由存储区中。当使用delete释放内存时,析构函数自动调用。
    • 程序可以创建临时对象完成特定操作,程序将在结束对该对象的使用时自动调用析构函数。
    • 如果没有定义析构函数,编译器将隐式的声明一个默认析构函数。
  • 创建对象
    • 创建一个Stock对象stock1并且赋初值。
    • Stock stock1("yang", 12, 20.0);
    • c++标准允许编译器使用两种方式来执行下面的语法。
    • Stock stock2 = Stock("yang", 12, 20.1);
    • 第一种和前面的语句的行为一样。第二种是允许创建一个临时对象,然后将该临时对象复制到stock2中。复制完后调用临时对象的析构函数。
    • 下述语句是赋值与初始化语句不一样。下面的语句会创建临时对象。
    • stock3 = Stock("yang", 12, 23.1);
  • c++11列表初始化
    • 只要提供与某个构造函数的参数列表匹配的内容,并用大括号括起来。
    • Stock stock = {"yang", 12, 12.1};
    • Stock stock2 {"yang"};
    • Stock stock3 {};
  • const成员函数
    • const Stock stock = Stock("yang");
    • stock.show();
    • 上述语句中编译器将会拒绝第二句。因为show方法中有可能会修改stock对象。
    • 如果希望编译器通过,需要一种新的语法。
    • void show() const;//声明
    • void Stock::show() const;//定义
    • 只要方法不修改调用对象,就应该将其声明为const。
  • 构造函数只有一个参数时,允许使用赋值语法将对象初始化为一个值。这种特性可能导致出现一些问题,后面介绍可以关闭这种特性。

类的构造和析构

原文:https://www.cnblogs.com/yangzixiong/p/11973925.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!