C++(构造函数与析构函数)

C++(构造函数与析构函数)


1. 构造函数

用于对类的对象的初始化,构造函数名与类名相同。

可在类内直接定义,也可在类内声明类外定义(定义时在函数名前加类名::)。

构造函数无返回值类型。

class C
{
public:
C(int a,int b);//类内声明
private:
int m_num1;
int m_num2;
};
//类外定义
C::C(int a,int b)
{
m_num1=a;
m_num2=b;
}
  1. 带参数的构造函数
    初始化可以在函数体内,也可在函数体外。可以重载。
    上例为函数体内进行初始化
    函数体外初始化:

    C::C(int a,int b):m_num1(a),m_num2(2){};
    //只能用()进行初始化,不能用“=”,多个参数之间用逗号隔开
    //“:”到“{”的部分为初始化列表

    只能在初始化列表里进行初始化的情况:
    1、const成员和引用成员的初始化
    2、类A的构造函数有参,其成员是类B的对象,但是类B的构造函数无参。

  2. 缺省构造函数
    若未定义一个类的构造函数,则C++提供一个缺省的构造函数。缺省构造函数仅仅负责创建对象,而不做任何初始化工作。

  3. 拷贝构造函数
    用一个对象的值创建并初始化另一个对象

    拷贝构造函数名与类名相同,没有返回值类型,只有一个参数(为该类对象的引用)。

    格式为
    类名::拷贝构造函数名::(类名&引用名)
    {函数体}

    eg:
    class C
    {
    public:
    C(int a,int b)//带参构造函数
    {
    m_num1=a;
    m_num2=b;
    }
    C(C&obj)//拷贝构造函数的定义
    {
    m_num1=obj.m_num1;
    m_num2=obj.m_num2;
    }
    private:
    int m_num1;
    int m_num2;
    int main()
    {
    C objA(1,2);//objA的m_num1的值为1,m_num2的值为2
    C objB(objA);//此时objB的成员被objB赋值
    return 0;
    }


2. 析构函数

结束对象的生命期,打开一个文件使用完后关闭文件

无参数和返回值类型,不能随意调用,不能重载。析构函数名为~类名。

猜你喜欢

转载自blog.csdn.net/BeatRex/article/details/76407615