C/C++教程

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

本文主要是介绍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,"张三");
这篇关于C++40个入门知识点_20_ 构造函数的调用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!