02 构造函数+析构函数

构造函数

1)作用:用于对象的初始化
2)写法:
a)函数名是类名
b)不能有函数的返回值
c)可以有多个参数
d)可以没有参数
3)构造函数允许函数重载
4)如果类中一个构造函数都没有,那么编译器会提供一个默认的构造函数(无参的构造,可能会被优化)
5)C11新添了几个关键字用法:
a)explicit(明确的):只支持显示调用构造函数,不允许隐式转换
class Cstudent
{
public:
	explicit  Cstudent(const char* pName)
	{
		strcpy(m_name, pName);
	}
private:
	char m_name[32];
};
//"="在C++是一种隐式转换!
Cstudent someone ="张三";   //编译不通过,加了explicit关键字后不再支持隐式转换
Cstudent someone("张三");   //编译通过
b) delete(删除):表示禁止使用某函数 (可以删除默认构造函数)
class Cstudent
{
public:
	Cstudent()=delete;
private:
	char m_name[32];
};

Cstudent someone;  //编译不通过,默认构造函数已被删除
c)default(默认):表示使用默认的构造函数
class Cstudent
{
public:
	Cstudent()=default;
private:
	char m_name[32];
};

析构函数

1)作用:完成资源的反初始化,资源的释放
2)写法:
a)类名前加上~
b)通常是由编译器决定调用时机,不需要手动调用(就算自己调用编译器最后还是会自己调用)
c)不能有参数和返回值
3)析构函数不能重载
4)构造函数和析构函数通常是公有访问权限(public)

构造函数和析构函数的调用时机

  • 栈上的局部对象调用时机
    • 构造:声明该对象时构造
    • 析构:对象出作用域时调用析构
      int main()
      {
      	{
      		Cstudent someone("张三");  //调用构造函数
      	}  //调用析构函数
      	return 0;
      }
      
  • 全局对象的调用时机
    • 构造:进入到main函数之前
    • 析构:出main函数之后
      Cstudent someone();
       int main()
      {
          //在进入main之前调用构造函数
          //出main后再调用析构函数
          return 0;
      }
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莫滴感情

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值