C++结构体

2

C++结构体

  结构体进一步体现了面向对象的思想,但是和真正的面向对象有很大的差别,没有继承和多态的思想,但是已经可以定义成员函数和成员变量了,而且创建结构体变量时,可以实现将成员变量和成员函数封装在一个变量之中,实现多个结构体变量具有相同的结构,这一点类似于面向对象中的类。

结构体定义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include<iostream>
using namespace std;

//结构体的定义包括成员变量和成员函数,关键的是成员变量可以是不同的类型,这为我们操作不同类型的数据提供了便利。
//每一个结构体变量都具有相同的结构,但它们之间互不影响。
struct Student
{
string name = "xxx";
int age = 0;

string getName() {

return name;
}

int getAge() {

return age;
}
};

int main() {
//结构体变量的创建和基本类型相似,第一种方式是先定义,后初始化。
//但是和变量不同的是,如果成员变量没有默认值,编译器会自动添加默认值,不会报错,而基本类型没有默认值会报错。
Student s;
cout << "s的姓名是:" << s.getName() << endl;
cout << "s的年龄是:" << s.getAge() << endl;
cout << endl;

//结构体变量的第二种创建方式,定义的同时进行初始化,还有第三种定义方式,在结构体的花括号后面写上变量名,但是不推荐,因为会让其他人很难发现定义的具体位置,掌握前两种定义方法即可,第三种作为了解。
Student s1 = { "菜鸟", 24 };
cout << "s1的姓名是:" << s1.getName() << endl;
cout << "s1的年龄是:" << s1.getAge() << endl;
cout << endl;

cout << "···十年之后···" << endl;
s1.name = "大神";
s1.age = 34;
cout << "s1的姓名是:" << s1.getName() << endl;
cout << "s1的年龄是:" << s1.getAge() << endl;

return 0;
}

1

结构体数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
using namespace std;

struct Student
{
string name = "xxx";
int age = 0;

string getName() {

return name;
}

int getAge() {

return age;
}
};

int main() {
//结构体数组和普通变量的数组有相同的定义方法,访问是也是通过索引进行访问。
Student s[] = { {"C++程序员", 30}, {"Java程序员", 25}, {"Python程序员", 20} };

for (int i = 0; i < 3; i++) {

cout << "我的名字是:" << s[i].getName() << endl;
cout << "我的年龄是:" << s[i].getAge() << endl;
cout << endl;
}

return 0;
}

2

指针作为结构体成员变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include<iostream>
using namespace std;

//在定义结构体时,将指针作为成员变量,并且指向另一个结构体变量
struct LinkedList
{
int val;
LinkedList* next;
};

int main() {

//创建链表数据类型,如果指针作为结构体的成员,那么(*s).xxx可以写为s->xxx。
LinkedList l3 = { 3, NULL };
LinkedList l2 = { 2, &l3 };
LinkedList l1 = { 1, &l2 };

LinkedList* head = &l1;

while (head) {

cout << head->val << " -> ";
head = head->next;
}
cout << "NULL" << endl;

return 0;
}

4

结构体的嵌套定义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include<iostream>
using namespace std;

//在一个结构体中定义另一个结构体,可以实现结构体的嵌套定义,又可以保护内部结构体类型在外部不可以访问。
struct Student
{
struct Score
{
int chinese;
int math;
int english;
};

string name;
int age;
Score score;
};

int main() {

Student s = { "学霸", 24, {95, 100, 95} };

cout << s.name << "的年龄是" << s.age << "岁" << endl;
cout << "他的语文成绩是:" << s.score.chinese << endl;
cout << "他的数学成绩是:" << s.score.math << endl;
cout << "他的英语成绩是:" << s.score.english << endl;

return 0;
}

4

C++小结

  结构体是C语言中功能强大的工具之一,在没有面向对象的思想中,结构体起到了非常重要的作用,可以实现复杂数据类型的定义,而且可以对多个变量,函数进行封装,也是链表,二叉树等数据结构的重要组成部分,小伙伴们一定要掌握它。

-------------本文结束感谢您的阅读-------------
0%