赞
踩
结构体其实就是一个由多个数据打包成的新数据类型,可以包含多个数据类型。
如下就是一个结构体类型的定义:
// c++ 风格
struct Person
{
string name;
int age;
double hight;
double weight;
};
对于c++中的结构体的声明,像上面那样就行了;但你也会见到下面这样的:
// c 风格
typedef struct Person
{
string name;
int age;
double hight;
double weight;
}Per;
这种写法是从c沿用来的,因为c中声明结构体必须加struct
关键字,定义一个结构体变量也要加struct
关键字,很麻烦,所以就用typedef
,声明数据类型的别名。
例如:
// 此时,struct Person就等于Per;
struct Person person1;
Per person2;
此外,可以起多个别名:
typedef struct Person
{
string name;
int age;
double hight;
double weight;
}Per,Man,Woman;
// 此时,struct Person就等于Per,Man,Woman;
struct Person person1; // C 风格,多个struct关键字
Per person2; // 以下都是 C++ 风格
struct Person // 结构体声明
{
string name;
int age;
double hight;
double weight;
}ZhangSan,LiSi,person9527; // 同时定义了几个变量
struct
{
string name;
int age;
double hight;
double weight;
}ZhangSan,person9527;
struct Person
{
string name;
int age;
} ZhangSan = {"张三", 20}; // 定义时初始化
Person LiSi = {"李四", 39}; // 定义时初始化
Person WangWu; // 各元素单独初始化
WangWu.age = 20;
WangWu.name = "王五";
Person ZhangLiu = ZhangSan; // 另一结构体变量赋值
Person teachers[2] = {LiSi, {"Jack", 26}};
如果你熟悉C++类的概念,那你会某些情况下,可以将C++的结构体视为类对象;
C 和 C++中结构体的主要区别如下:
对于区别1,上文已经表述过了;下面主要展示C++中的结构体的用法:
下面的示例中,展示了构造函数,private权限以及在结构体中初始化成员变量:
struct Person { public: string name; int age; string nationality = "China"; private: Gender gen = hide; // 对外不可见 public: // 不同参数个数的构造函数: Person(string _name, int _age) : name(_name), age(_age){}; Person(string _name, int _age, string _nationa) : name(_name), age(_age), nationality(_nationa){}; Person(string _name, Gender _gen, int _age, string _nationa) : name(_name), gen(_gen), age(_age), nationality(_nationa){}; // 拷贝构造函数 Person(const Person &obj) : name(obj.name), gen(obj.gen), age(obj.age), nationality(obj.nationality) { cout << "拷贝构造调用!" << endl; }; };
此时,定义两个Person变量看看:
void printP(Person &input) // 打印输出函数
{
cout << "name:" << input.name << endl;
// cout << "gen:" << input.gen << endl;
cout << "age:" << input.age << endl;
cout << "nationality:" << input.nationality << endl << endl;
};
Person p1("张三", 20);
Person p2("李四", female, 20, "British");
Person p3 = p1; // 这里将会调用拷贝构造函数
printP(p1);
printP(p2);
printP(p3);
输出结果:(张三调用的是两个参数的构造函数,默认国籍是China;李四则是输入的值)
拷贝构造调用!
name:张三
age:20
nationality:China
name:李四
age:20
nationality:British
name:张三
age:20
nationality:China
以上就是本次分享全部内容,欢迎留言讨论!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。