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; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)