C++ 构造函数 析构函数

一、整体代码

    Test.h

#ifndef _TEST_H_
#define _TEST_H_
class Test
{
public:
    // 如果类不提供任何一个构造函数,系统将为我们提供一个不带参数的
    // 默认的构造函数
    Test();
    Test(int num);
    void Display();
    ~Test();
private:
    int num_;
};
#endif // _TEST_H_

   Test.cpp

#include "Test.h"
#include <iostream>
using namespace std;
// 不带参数的构造函数称为默认构造函数
Test::Test()
{
    num_ = 0;
    cout<<"Initializing Default"<<endl;
}
Test::Test(int num/*=0*/)//num = 0 是缺省参数的构造函数
{
    num_ = num;
    cout<<"Initializing "<<num_<<endl;
}
Test::~Test()
{
    cout<<"Destroy "<<num_<<endl;
}
void Test::Display()
{
    cout<<"num="<<num_<<endl;
}

   01.cpp

01.cpp
#include "Test.h"
int main(void)
{
    Test a;
    a.Display();
    Test a2(10);
    Test a4 = 10;
    a2.Display();
    Test* a3 = new Test(20);    // new operator
    a3->Display();
    delete a3;

    int b;
    int b2(2);
    int b4 = 2;
    int* b3 = new int(38);//
    delete b3;

    Test c[2] = {10, 20};
    Test* c2 = new Test[2];//只能调用默认构造函数 c2[0].Display()  c2[1].Display()
    delete[] c2;

    int d[2]={10,20};
    int* d2 = new int[2];
    delete[] d2;
    
    return 0;
}

二、运行结果

   


三、解释

    

   Test a;
   Test* a3 = new Test(20);
   第一个是在栈内存分配了空间,第二个是在堆内存分配了空间,第一个随着作用域的结束,而调用析构函数,第二个必须要手动delete,才能调用析构函数。
   析构函数没有返回值,不能重载。
   构造函数可以重载,但是重载后默认构造函数就没有了。
   系统提供空的构造函数和析构函数。
   缺省参数的构造函数,Test(int num=0),和Test()重复了,如果Test t 就不知道调用哪个了。

四、静态成员变量,局部变量,全局变量,构造函数初始化列表,都采用上面三种方式初始化对象,Test a; Test a(2);Test a=2; 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值