02 构造函数+析构函数

02 构造函数+析构函数,第1张

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;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5711087.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存