在 C++ 里可以将结构体看作没有任何成员函数的对象,下面对 C++ 结构体的几种初始化方法进行总结。
直接赋值
#include <bits/stdc++.h>
using namespace std;
struct Date
{
int year;
double month;
string day;
};
int main()
{
// 第1种方法
Date date1;
date1.year = 2022;
date1.month = 7.0;
date1.day = "22";
cout<<date1.year<<" "<<date1.month<<" "<<date1.day<<endl;
// 第2种方法
Date date2 = {2022, 7.0, "22"}; // 顺序赋值
cout<<date2.year<<" "<<date2.month<<" "<<date2.day<<endl;
return 0;
}
如果只是想全部初始化为 0 可以按照如下方法
#include <bits/stdc++.h>
using namespace std;
struct Date
{
int year;
double month;
string day;
};
int main()
{
// 第一种方法
Date date1 = {}; // 初始完后字符串为空串
cout<<date1.year<<" "<<date1.month<<" "<<date1.day<<endl; // 0 0
// 第二种方法 (注意只有0能将所有变量初始化为0,使用其他数字只能将第一个数初始化为1其他仍为0)
Date date2 = {0}; // 初始完后字符串为空串
cout<<date2.year<<" "<<date2.month<<" "<<date2.day<<endl; // 0 0
return 0;
}
结构体包含数组(数组在结构体变量定义完就初始化为0)
#include <bits/stdc++.h>
using namespace std;
struct Date
{
int year;
double month;
string day;
int a[10];
};
int main()
{
Date date2 = {2022, 7.0, "22", {1}}; // 顺序赋值
cout<<date2.year<<" "<<date2.month<<" "<<date2.day<<" "<<date2.a[0]<<" "<<date2.a[1]<<endl; //2022 7 22 1 0
return 0;
}
利用函数赋值
直接赋值的方法虽然很直观,但是如果需要初始化多个结构体变量,那么代码量为很多且很冗余,而顺序赋值的方式会因为参数过多而容易出错,因此我们可以利用函数来为结构体变量赋值。
#include <bits/stdc++.h>
using namespace std;
struct Date
{
int year;
double month;
string day;
int a[10];
};
Date init( int year, double month, string day)
{
Date temp;
temp.year = year;
temp.month = month;
temp.day = day;
memset(a, 0, sizeof(a)); // 需要memst进行初始化,不然a数组不会被初始化为0
return temp;
}
int main()
{
Date date = init(2022, 7.0, "22");
cout<<date.year<<" "<<date.month<<" "<<date.day<<" "<<date.a[0]<<endl; // 2022 7 22 0
return 0;
}
需要注意的是,结构体=结构体是浅拷贝,简单变量没问题,动态分配的变量会出问题。
构造函数初始化
引言提到,在 c++ 中可以将结构体看作没有任何成员函数的对象,因此也可以使用构造函数进行初始化。文章来源:https://www.toymoban.com/news/detail-590693.html
#include <bits/stdc++.h>
using namespace std;
struct Date
{
int year;
double month;
string day;
int a[10];
Date()
{
year = 2022;
month = 7.0;
day = "22";
}
Date(int year) //这里可以使用 Date(int year=0) 来指定year默认值,但是这样就不能有Date()
{
this->year = year;
month = 7.0;
day = "22";
}
};
int main()
{
// 默认值初始化
Date date1;
cout<<date1.year<<" "<<date1.month<<" "<<date1.day<<" "<<date1.a[0]<<endl; // 2022 7 22 0
// 指定一个值
Date date2(2022);
cout<<date2.year<<" "<<date2.month<<" "<<date2.day<<" "<<date2.a[0]<<endl; // 2022 7 22 0
return 0;
}
当然除了指定一个 year, 我们也可以指定 month、day 等,这里就不详细展开了。
我们可以用冒号操作来简化构造函数的写法。文章来源地址https://www.toymoban.com/news/detail-590693.html
#include <bits/stdc++.h>
using namespace std;
struct Date
{
int year;
double month;
string day;
int a[10];
Date() : year(2022),month(7.0),day("22"){}
Date(int year) : year(year),month(7.0),day("22") {}//这里可以使用 Date(int year=0) 来指定year默认值,但是这样就不能有Date()
};
int main()
{
// 默认值初始化
Date date1;
cout<<date1.year<<" "<<date1.month<<" "<<date1.day<<" "<<date1.a[0]<<endl; // 2022 7 22 0
// 指定一个值
Date date2(2022);
cout<<date2.year<<" "<<date2.month<<" "<<date2.day<<" "<<date2.a[0]<<endl; // 2022 7 22 0
return 0;
}
到了这里,关于C++结构体初始化方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!