欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

面向对象——构造函数与析构函数

程序员文章站 2024-03-17 16:18:16
...

构造函数

  • 主要作用
    用于建立对象时,为对象的数据成员提供初始初始值(数据成员初始化)
  • 定义语法
    基本要素:
    (1) 函数名
    (2) 参数列表
    (3) 返回类型
    (4) 函数体(函数实现)
class X{    ……
    X(){}    //构造函数
    ……
} 

面向对象——构造函数与析构函数

  • 调用形式和时机
    **调用形式:

    有参: 类名 对象名(实参列表);
    无参: 类名 对象名;
    
  • 调用时机: 在定义对象时,由编译系统自动调用!

    系统将根据“参数列表”调用某个构造函数;  
    若无参数列表将调用不需要参数的构造函数;
    
  • 特点及注意事项
    1、构造函数与类同名:类名( )
    2、构造函数没有(无)返回类型
    3、构造函数可以被重载(无参+有参)
    4、构造函数由编译系统自动调用,不允许程序员显式调用。
    5、构造函数通常应定义为公有成员
    6、定义对象数组或用new创建动态对象时,也要调用构造函数。但定义数组对象时,必须有不需要参数的构造函数

#include <iostream>
using namespace std;
class Desk{
public:
    Desk(int, int, int, int);		  //构造函数声明
    void  setWeight(int w) { weight=w; }  //成员函数(内部)定义
private:
    int weight, length, width, high;
};
Desk::Desk(int ww,int l,int w,int h) {	//构造函数(外部)定义
    weight=ww;   high=l;
    width=w;    	 length=h;
    cout<<"call constructor  !"<<endl;
}
int main(){
	 Desk d1(2,3,3,5);	//实例化一个对象(隐式调用构造函数)
}

析构函数

  • 主要作用
    用于对象生命期结束时,回收对象(分配的内存空间)

  • 定义语法

class X{   ……
   ~X(){} //析构函数
   ……
}

} 

  • 调用形式和时机
    **调用形式:
    用户不能调用析构函数;

  • 调用时机: 对象生命期结束时, 编译系统将自动调用

    自动/局部对象:定义的语句块结束处
    全局对象:程序结束时
    静态对象:程序结束时
    
  • 特点及注意事项
    1、析构函数名为:~类名( )
    2、析构函数没有(无)返回类型
    3、析构函数没有(无)参数,不能被重载:每个类仅有一个析构函数
    4、构造函数由编译系统自动调用,不允许程序员显式调用。
    5、若有多个对象同时结束生存期,C++将按照与调用构造函数相反的次序调用析构函数。
    6、 每个类都应该有一个析构函数,如果没有显式定义析构函数。C++将产生一个最小化的默认析构函数。即: ~类名( ){ } //什么都不做的析构函数
    7、构造函数和析构函数都可以是inline内联函数
    8、 在通常情况下,析构函数与构造函数都应该被设置为类的公有成员。

用析构函数释放构造函数中分配的*存储空间
#include <iostream>
using namespace std;
class B{
private:
    int *a;    char *pc;
public:
    inline B(int x){			//构造函数
        a=new int[10];        pc=new char;	//分配*存储空间
    }
    inline ~B(){				//析构函数
        delete []a;        delete pc;		//释放*存储空间
    }
};
int main(){
    B x(1);
}
相关标签: C++面向对象