C/C++ 数组允许定义可存储相同类型数据项的变量,但是结构是 C++ 中另一种用户自定义的可用的数据类型,允许存储不同类型的数据项。
C++ 中的 struct
对 C 中的 struct
进行了扩充,它已经不再只是一个包含不同数据类型的数据结构了,包括一下的功能:
struct
可以包含成员函数
struct
可以继承吗
struct
可以实现多态
struct
和 class
的区别:
默认的继承访问权限。struct
是 public
的,class
是 private
的。
定义结构
使用 struct
语句。struct
语句定义了一个包含多个成员的新的数据类型:
1 2 3 4 5 6 7
| struct type_name { member_type1 member_name1; member_type2 member_name2; member_type3 member_name3; . . } object_names;
|
实例:
1 2 3 4 5 6 7
| struct Books { char title[50]; char author[50]; char subject[100]; int book_id; } book;
|
访问结构成员
为了访问结构的成员,我们使用成员访问运算符 .
。
实例
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 44 45
| #include <iostream> #include <cstring> using namespace std;
struct Books { char title[50]; char author[50]; char subject[100]; int book_id; }; int main( ) { Books Book1; Books Book2; strcpy( Book1.title, "C++ 教程"); strcpy( Book1.author, "Runoob"); strcpy( Book1.subject, "编程语言"); Book1.book_id = 12345; strcpy( Book2.title, "CSS 教程"); strcpy( Book2.author, "Runoob"); strcpy( Book2.subject, "前端技术"); Book2.book_id = 12346; cout << "第一本书标题 : " << Book1.title <<endl; cout << "第一本书作者 : " << Book1.author <<endl; cout << "第一本书类目 : " << Book1.subject <<endl; cout << "第一本书 ID : " << Book1.book_id <<endl; cout << "第二本书标题 : " << Book2.title <<endl; cout << "第二本书作者 : " << Book2.author <<endl; cout << "第二本书类目 : " << Book2.subject <<endl; cout << "第二本书 ID : " << Book2.book_id <<endl; return 0; }
|
结果:
1 2 3 4 5 6 7 8
| 第一本书标题 : C++ 教程 第一本书作者 : Runoob 第一本书类目 : 编程语言 第一本书 ID : 12345 第二本书标题 : CSS 教程 第二本书作者 : Runoob 第二本书类目 : 前端技术 第二本书 ID : 12346
|
结构作为函数参数
把结构作为函数参数,传参方式与其他类型的变量或指针类似。
实例
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 44 45 46 47
| #include <iostream> #include <cstring> using namespace std; void printBook( struct Books book );
struct Books { char title[50]; char author[50]; char subject[100]; int book_id; }; int main( ) { Books Book1; Books Book2; strcpy( Book1.title, "C++ 教程"); strcpy( Book1.author, "Runoob"); strcpy( Book1.subject, "编程语言"); Book1.book_id = 12345; strcpy( Book2.title, "CSS 教程"); strcpy( Book2.author, "Runoob"); strcpy( Book2.subject, "前端技术"); Book2.book_id = 12346; printBook( Book1 ); printBook( Book2 ); return 0; } void printBook( struct Books book ) { cout << "书标题 : " << book.title <<endl; cout << "书作者 : " << book.author <<endl; cout << "书类目 : " << book.subject <<endl; cout << "书 ID : " << book.book_id <<endl; }
|
结果:
1 2 3 4 5 6 7 8
| 书标题 : C++ 教程 书作者 : Runoob 书类目 : 编程语言 书 ID : 12345 书标题 : CSS 教程 书作者 : Runoob 书类目 : 前端技术 书 ID : 12346
|
指向结构的指针
定义指向结构的指针,方式与定义指向其他类型变量的指针相似。
实例:
1 2 3 4 5 6 7
| struct Books *struct_pointer;
struct_pointer = &Book1;
struct_pointer->title;
|
实例
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 44 45 46 47
| #include <iostream> #include <cstring> using namespace std; void printBook( struct Books *book ); struct Books { char title[50]; char author[50]; char subject[100]; int book_id; }; int main( ) { Books Book1; Books Book2; strcpy( Book1.title, "C++ 教程"); strcpy( Book1.author, "Runoob"); strcpy( Book1.subject, "编程语言"); Book1.book_id = 12345; strcpy( Book2.title, "CSS 教程"); strcpy( Book2.author, "Runoob"); strcpy( Book2.subject, "前端技术"); Book2.book_id = 12346; printBook( &Book1 ); printBook( &Book2 ); return 0; }
void printBook( struct Books *book ) { cout << "书标题 : " << book->title <<endl; cout << "书作者 : " << book->author <<endl; cout << "书类目 : " << book->subject <<endl; cout << "书 ID : " << book->book_id <<endl; }
|
结果:
1 2 3 4 5 6 7 8
| 书标题 : C++ 教程 书作者 : Runoob 书类目 : 编程语言 书 ID : 12345 书标题 : CSS 教程 书作者 : Runoob 书类目 : 前端技术 书 ID : 12346
|
typedef 关键字
使用 typedef
关键字,为创建的类型取一个 别名
。
1 2 3 4 5 6 7
| typedef struct Books { char title[50]; char author[50]; char subject[100]; int book_id; }Books;
|
现在,可以直接使用 Books
来定义 Books
类型的变量,而不需要使用 struct
关键字。
下面是实例:
可以使用 typedef
关键字来定义非结构类型,如下所示:
1 2 3
| typedef long int *pint32; pint32 x, y, z;
|
x, y 和 z 都是指向长整型 long int
的指针。
C++ 数据结构