构造函数的作用以及写法:https://www.bilibili.com/video/BV1jJ41127dx/?spm_id_from=trigger_reload
构造函数的调用:https://www.bilibili.com/video/BV1jJ41127RB/?spm_id_from=trigger_reload
#include "stdafx.h"
#include <stdlib.h>
#include <string.h>
//构造与析构
//构造函数:类定义了一个对象,可以在定义的时候对其附一个初值;
//1.用于对象的初始化
//2.写法:
// 1)函数名必须是类名;2)不写函数的返回值;3)可以有参数>=0;
//3.构造函数允许函数的重载
//4.如果类中一个构造函数都没有,编译器会提供一个默认构造函数(无参数的构造,可能会被优化)
/新添加标准:
//1).explicit关键字:只支持显示调用构造函数,不允许隐士转换
//2)=default 类中:CStudent() = delete;表示删除CStudent构造函数
//3)=delete CStudent() = default ;表示显示的指出使用默认的构造函数
//描述班级学生
class CStudent {
public:
//构造函数
//没有参数的构造函数
CStudent (){
// strcpy_s(m_szName,pszName);
printf("CStudnet()\r\n");
}
//一个参数的构造函数
CStudent (char* pszName){
// strcpy_s(m_szName,pszName);
printf("CStudnet()\r\n");
}
//两个参数的构造函数
CStudent (int nStuID,char* pszName){
// strcpy_s(m_szName,pszName);
printf("CStudnet()\r\n");
}
void SetName(char* pszName){
strcpy_s(m_szName,pszName); //外部可能会引起缓冲区溢出 pszName=m_szName;
}
private:
int m_nStuID;
char m_szName[255];
};
int main()
{
CStudnet stu = "张三"; //正确:CStudnet stu("张三") 或则CStudnet stu=CStudnet("张三")
//CStudnet stu;
//stu.SetName("张三");
CStudnet stu2; //编译不过
stu.SetName("李四");
};