C++用构造函数初始化类中字符数组字段后输出和字符串“赋值”字符数组的方法和异常处理。

本文详细介绍了C++中的构造函数和析构函数,包括它们的作用、格式和调用时机。此外,还讨论了如何正确地将字符串和字符数组赋值给另一个字符数组,以及如何处理变量与父类重名的问题。通过实例展示了如何使用构造函数初始化类的对象,并打印所有数据。最后,提到了strcpy函数的使用及其可能遇到的安全警告和解决方案。
摘要由CSDN通过智能技术生成

文章内容
①重点记录(首先记录):构造函数,析构函数。
②辅助记录(最后记录):字符串和字符数组“赋值”给另一个字符数组的方法和出现“严重性 禁止显示状态”问题的解决,以及变量与父类重名的问题。

构造函数定义:
类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行。

构造函数的名称与类的名称相同。
构造函数没有返回值类型,同时分为无参构造和有参构造。
构造函数通常用于为成员变量设置初始值。

格式:
无参构造: 类名();
有参构造: 类名(参数类型);

注意:
创建类的对象时,系统会默认执行构造函数。
若类中未定义构造函数时,系统会默认创建并执行无参构造函数;
若存在无参构造函数时,则会在创建类的对象时自动执行;
若存在一个有参构造函数时,则会在创建类的对象时要求进行赋值并调用有参构造函数;
若存在多个有参构造函数时,则会根据参数类型和位数进行选择调用对应的有参构造函数。

析构函数定义:
类的析构函数是类的一种特殊的成员函数,它会在每次删除所创建的对象时执行。

析构函数的名称与类的名称相同,只是在前面加了个波浪号(~)作为前缀。
析构函数没有返回值类型,也不能带有任何参数。
析构函数通常用于在跳出程序前释放资源。

格式:
~类名();

注意:
类的对象生命周期结束后,系统会自动执行析构函数。

举个例子:
编写Book类,类中有字符数组字段,表示图书名字、图书作者、图书书号、出版社,有一个浮点型字段表示数的单价,使用构造函数初始化所有字段,并打印对象所有数据。

class Book {
public:
	char bookName[10], bookAuthor[10], bookSno[5], bookPress[20];//定义字符数组
	float money;
	Book(char[], char[], char[], char[], float);//定义含参构造函数
	void print();//定义打印方法
	~Book();//定义析构函数
};

//为构造函数赋值
Book::Book(char name[], char author[], char sno[], char press[], float money) {
	strcpy(bookName,name);//字符数组不可以直接赋值给另一个字符数组,要用strcpy函数将右边的字符串或字符数组复制给左边的字符数组。
	strcpy(bookAuthor, author);
	strcpy(bookSno, sno);
	strcpy(bookPress,press);
	this->money=money;//变量与父类重名时使用this调用父类的变量,注意this→变量名不是this.变量名
}

void Book::print() {
	cout <<"书名:" << bookName << "\n作者:" << bookAuthor << "\n书号:"<<bookSno<<"\n出版社:"<<bookPress<<"\n价格:"<<money;
}

Book::~Book() {
	cout << "\n执行完毕!";
}

int main()
{
		char name[] = "C++", author[] = "摸鱼", sno[] = "1234", press[] = "摸鱼王";
		Book book(name, author, sno, press, 20.21);
		book.print();
}

执行结果:
在这里插入图片描述
补充:

1.字符串和字符数组赋值给另一个字符数组的方法。
首先纠正赋值的说法,准确说应该为复制,这里使用strcpy()方法;

规则:
strcpy(left,right);
left为要复制给的字符数组名字,right可为即将要复制的字符数组或字符串。

注意:
①:strcpy函数是将右边的字符串或数组复制给右边字符数组,而赋值语句只能将一个字符赋给一个字符变量或者字符数组元素。因此不能用“=”进行赋值。

②:可能会出现的“严重性 禁止显示状态”的异常问题导致程序无法正常运行,这是由于strcpy()方法被微软认为是不安全的,解决方法是在程序头文件部分写入 #pragma warning(disable:4996),或将strcpy改为strcpy_s,即可解决。

2.变量与父类重名
变量与父类重名时可以使用this调用父类的变量,注意是this→变量名不是this.变量名。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值