构造函数
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)
构造函数和析构函数的调用时机