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

构造函数

构造函数是特殊的成员函数;

创建类类型的新对象,系统会自动调用构造函数;

构造函数是为了保证对象的每个数据成员都被正确初始化;

函数名和类名完全相同;

不能定义构造函数的类型(返回类型),也不能使用void

通常情况下构造函数应该声明为公有函数,否则他不能像其他成员函数那样被显式地调用;

构造函数被声明为私有有特殊的用途

#include <iostream>
class Test
{
public:
    Test();
private:
    int m_nNum;
}

//不带参数的构造函数为默认构造函数
//如果类不提供任何一个构造函数系统将为我们提供一个不带参数的构造函数
Test::Test()
{
    m_nNum= 0;
    count<<"Initializing Default"<<endl;
}

int main(void)
{
    Test t;
    return 0;

}

构造函数可以有任意类型和任意个数的参数,一个类可以有多个构造函数(重载)

默认构造函数

不带参数的构造函数

如果程序中未声明,则系统自动产出一个默认构造函数;

#include <iostream>
class Test
{
public:
    Test(int num);
    void Display();
private:
    int m_nNum;
}

//没有定义默认构造函数不能够直接定义类变量
Test::Test(int num)
{
    m_nNum= 0;
    count<<"Initializing Default"<<endl;
}

int main(void)
{
    Test t(10);
    t.Display();
    return 0;

}

构造函数和new运算符 析构函数和delete函数

#include <iostream>
class Test
{
public:
    Test(int num);
    ~Test();    //析构函数只有默认析构函数一般不带参数;
    void Display();
private:
    int m_nNum;
}

void Test::Display()
{
    count<<"Display Num"<< m_nNum<<endl;
}

//没有定义默认构造函数不能够直接定义类变量
Test::Test(int num)
{
    m_nNum= num;
    count<<"Initializing Default"<<endl;
}

//没有定义默认构造函数不能够直接定义类变量
Test::~Test()
{
    count<<"Destroy "<< m_nNum<<endl;
}

int main(void)
{
    Test t1;    //栈内存 先析构后构建的,后析构先构建的;
    Test t2;
    Test *t = new Test(2);    //调用构造函数 //堆内存 手动析构
    t->Display();
    delete t;    //调用析构函数
    return 0;

}

全局对象的构造先于Main函数

析构函数可以显式调用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值