C++40个入门知识点_20_ 构造函数的调用

承接上篇,本篇介绍构造函数的调用,
1.调用的相关性质如下:

//(1)作用:用于对象的初始化,在定义的时候就定义对象的初值
//(2)写法:函数名是类名;不写函数的返回值;参数可以有也可以没有
//(3)构造函数允许函数重载
//(4)如果类中一个构造函数都没有,编译器会提供一个默认的构造函数(无参的构造,可能会被优化)
//explicit CStudent(char* pszName) {strcpy_s(m_szName, pszName);};只支持显示调用构造函数CStudent stu("张三");,不允许隐式转换 CStudent stu="张三"
//explicit关键字增加后只支持显示调用构造函数CStudent stu("张三");,不允许隐式转换 CStudent stu="张三";就无法编译通过,这种是隐式转换的写法
//(6)=default 显示的指出来创建默认的构造函数
//	 CStudent=delete 表示禁止使用某函数,删除构造函数,没有构造函数

2.视频学习地址:构造函数的调用
3.学习笔记:


#include <iostream>

//构造与析构
//构造函数:
//(1)作用:用于对象的初始化,在定义的时候就定义对象的初值
//(2)写法:函数名是类名;不写函数的返回值;参数可以有也可以没有
//(3)构造函数允许函数重载
//(4)如果类中一个构造函数都没有,编译器会提供一个默认的构造函数(无参的构造,可能会被优化)
//explicit CStudent(char* pszName) {strcpy_s(m_szName, pszName);};只支持显示调用构造函数CStudent stu("张三");,不允许隐式转换 CStudent stu="张三"
//explicit关键字增加后只支持显示调用构造函数CStudent stu("张三");,不允许隐式转换 CStudent stu="张三";就无法编译通过,这种是隐式转换的写法
//(6)=default 显示的指出来创建默认的构造函数
//	 CStudent=delete 表示禁止使用某函数,删除构造函数,没有构造函数

class CStudent {

public:
	//无参构造函数
	CStudent() {
		//strcpy_s(m_szName, pszName);
	
	}
	//一个参数的构造函数
	CStudent(char* pszName) {
		strcpy_s(m_szName, pszName);

	}

	//两个参数的构造函数
	CStudent(int nStuID,char* pszName) {
		strcpy_s(m_szName, pszName);

	}

	void SetName(char* pszName)
	{
		//存在缓冲区溢出的风险,pszName并不知道指向的字符串的大小,若大于255,则可能将原来字符串末尾覆盖
		strcpy_s(m_szName,pszName);//m_szName并未定义大小,存在溢出风险,系统提示使用strcpy_s

		}

private:
	int m_nStudID;//学号
	char m_szName[255];//255个字节的缓冲区,姓名
};

int main(int argc,char* argv[])
{
	//CStudent stu2;//无参的构造调用

	//C++中给对象进行赋值的方法,按照构造函数参数要求写入数据
     //CStudent stu("张三");//一个参数的构造调用
	 //CStudent stu="张三";//一个参数的构造调用,一种隐式转换的含义

	//2个参数的构造调用
	//CStudent stu(1,"张三");
	//CStudent stu=CStudent(1,"张三");


	 //分别创建对象就显得很麻烦,在变量定义的时候就可以赋初值,对象是否可以赋初值
	//stu.SetName("张三");
	/*CStudent stu2;*/
	//stu.SetName("李四");


	return 0;
}


4.特别注意构造函数调用的写法:

	CStudent stu=CStudent(1,"张三");
上一篇:Mybatis 通用分页插件PageHelper


下一篇:mongodb查询出某个字段最大值