结构体是特殊的 类。
参考链接:
结构体和类的区别_u011555996的博客-CSDN博客_结构体和类的区别
看如下代码:
#include <iostream>
using namespace std;
//使用默认构造函数
struct student {
int id;
char gender;
}pig; //能不经初始化就定义变量
int main(){
pig = {23,'F'};//使用该语句必须整体赋值,不能单独赋值
cout << "pig.id: " << pig.id << endl;
cout << "pig.gender: " << pig.gender << endl;
return 0;
}
使用默认构造函数,pig = {23,'F'}; 使用该语句必须整体赋值,不能单独赋值。那怎么样可以单独赋值也可以多个赋值呢?代码如下:
#include <iostream>
using namespace std;
//同时用默认构造函数和自定义构造函数
struct student {
int id;
char gender;
student(){}; //显示默认构造函数
//自定义构造函数
//可以同时初始化id和gender
student(int _id, char _gender) : id(_id), gender(_gender){
cout << "_gender: " << _gender << endl;
cout << "_id: " << _id << endl;
}
//也可以单独初始化gender
student(char _gender) : gender(_gender){
cout << "_gender: " << _gender << endl;
}
student(int _id) : id(_id){
cout << "_id: " << _id << endl;
}
}test1,test2,test3; //能不经初始化就定义变量
int main(){
test1 = {23,'F'}; //使用构造函数 student(int _id, char _gender)
test2 = student(23,'F'); //直接使用构造函数,同时赋值 student(int _id, char _gender)
test3 = student('M'); //直接使用构造函数,单独赋值 student(char _gender)
test3 = {23}; //直接使用构造函数,单独赋值student(int _id)
return 0;
}
如果不使用默认构造函数,那么该结构体必须使用自定义构造函数才可以初始化,否则会报错。
在注释掉student(){};的情况下,报错内容
error: no matching function for call to 'student::student()'}test1,test2,test3;
即如果使用自定义构造函数,默认构造函数会被覆盖,该情况下只能通过该方法创建结构体变量
student test1 (23,'F');
student test2 (23);
student test3 ('F');
直接使用自定义构造函数并赋值。
参考链接