• C++基础知识(七)--构造函数与析构函数--含成员对象的构造函数与析构函数


    一、构造函数与析构函数

      1.构造函数的作用:初始化对象的数据成员。在类对象被创建时,编译系统为对象分配内存空间,并自动调用构造函数,由构造函数完成成员的初始化操作。

    • 构造函数特征:
      • 函数名与类名相同
      • 构造函数无返回类型说明,什么也不写,也不可写void
      • 在程序运行时,当新的对象被建立,该对象所属的类的构造函数自动被调用,在该对象的生命期内也只调用这一次
      • 构造函数可以重载,即说明中可以有多个构造函数。它们由不同的参数列表区分,系统在自动调用时一般按照函数重载的规则选择一个执行。
      • 构造函数可以在类内定义也可以在类外定义。一般选择在类外定义,可以考虑使用inline内联函数
      • 如果类说明中没有给出构造函数,则C++编译器自动给出一个默认的构造函数

      2.构造函数的调用:

    • 构造函数:
       1 CGoods(char*name,int amount,float price)
       2 {
       3 strcpy(Name,name);
       4 Amount=amount;
       5 Price=price;
       6 Total_value=price*amount;
       7 }//CGoods的构造函数
       8 
       9 //构造函数的调用
      10 CGoods Car1("夏利200",30,98000.0);
      11 调用上边的构造函数,等价于:
      12 CGoods Car1=CGoods("夏利200",30,98000.0);

      3.析构函数的作用:当一个对象的生命期结束时,C++会自动调用析构函数对该对象进行善后工作

    • 析构函数的特征:
      • 析构函数名与类名相同,但在前面加上~,如~CGoods()
      • 析构函数无返回值类型,析构函数不带任何参数
      • 一个类有一个且只有一个析构函数,这一构造函数不同。析构函数可以默认。
      • 对象注销时,系统自动调用析构函数。



     二、含有成员对象的构造函数与析构函数

      1.类的成员中,除了成员数据和成员函数外,还有成员对象,即用其他类的对象作为类的对象。使用成员对象的技术成为聚合。成员对象时实体,系统不仅为它分配内存,而且还要进行初始化。

      2.含有对象成员的构造函数:

    • 格式:---------类名::构造函数名(参数总表):对象成员1(参数列表1),对象成员2(参数列表2){......}
    • 含有对象成员的类对象初始化时,首先依次自动调用各成员对象的构造函数,再执行该类对象自己的构造函数的函数体部分。各成员对象的构造函数的调用顺序与类定义中的说明顺序一致,而与它们在构造函数成员初始化列表中的顺序无关。
    •  1 class date
       2 {
       3 int year,month,day;
       4 date(int y,int m,int d)
       5 {
       6 year=y;
       7 month=m;
       8 day=d;
       9 }
      10 }
      11 
      12 class person
      13 {
      14 char name[12];
      15 char sex[4];
      16 date bitrhday;
      17 public:
      18     person(char*,char*,int,int,int);
      19 ......  
      20 
      21 }
      22 
      23 person::person(char*n,char*s,int y,int m,int d):birthday(y,m,d)
      24 {
      25 strcpy(name,n);
      26 strcpy(sex,n);
      27 }

      //这里的birthday(y,m,d)不能写成date(y,m,d)

      若一个类包含对象成员,在建立该类的对象时,先调用对象成员的构造函数,初始化相应的对象成员,再执行该类的构造函数

      3.含有成员对象的析构函数

    因为析构函数没有参数,所以包含成员对象的类的析构函数形式上并无特殊之处。但在撤销该类对象的时候,会首先调用自己的析构函数,再调用成员对象的析构函数,调用次序与初始化时的次序相反。

  • 相关阅读:
    Spring、Spring Boot 和 Spring Cloud 的关系
    Spring Boot 如何设置支持跨域请求?
    什么是嵌入式服务器?我们为什么要使用嵌入式服务器呢?
    nginx配置域名,不要端口
    域名解析以及nginx服务器设置
    为什么使用nginx
    RabbitMQ下载与安装(window版)
    spring的@ComponentScan注解
    spring的@EnableScheduling注解
    日志切割: logrotate、python、shell实现
  • 原文地址:https://www.cnblogs.com/southcyy/p/10255976.html
Copyright © 2020-2023  润新知