文章链接:
结构体定义:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 struct Books 2 { 3 char title[50]; 4 char author[50]; 5 char subject[100]; 6 int book_id; 7 } book;
访问结构体成员:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <iostream> 2 #include <cstring> 3 4 using namespace std; 5 6 // 声明一个结构体类型 Books 7 struct Books 8 { 9 char title[50]; 10 char author[50]; 11 char subject[100]; 12 int book_id; 13 }; 14 15 int main( ) 16 { 17 Books Book1; // 定义结构体类型 Books 的变量 Book1 18 Books Book2; // 定义结构体类型 Books 的变量 Book2 19 20 // Book1 详述 21 strcpy( Book1.title, "C++ 教程"); 22 strcpy( Book1.author, "Runoob"); 23 strcpy( Book1.subject, "编程语言"); 24 Book1.book_id = 12345; 25 26 // Book2 详述 27 strcpy( Book2.title, "CSS 教程"); 28 strcpy( Book2.author, "Runoob"); 29 strcpy( Book2.subject, "前端技术"); 30 Book2.book_id = 12346; 31 32 // 输出 Book1 信息 33 cout << "第一本书标题 : " << Book1.title <<endl; 34 cout << "第一本书作者 : " << Book1.author <<endl; 35 cout << "第一本书类目 : " << Book1.subject <<endl; 36 cout << "第一本书 ID : " << Book1.book_id <<endl; 37 38 // 输出 Book2 信息 39 cout << "第二本书标题 : " << Book2.title <<endl; 40 cout << "第二本书作者 : " << Book2.author <<endl; 41 cout << "第二本书类目 : " << Book2.subject <<endl; 42 cout << "第二本书 ID : " << Book2.book_id <<endl; 43 44 return 0; 45 }
结构作为函数参数:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <iostream> 2 #include <cstring> 3 4 using namespace std; 5 void printBook( struct Books book ); 6 7 // 声明一个结构体类型 Books 8 struct Books 9 { 10 char title[50]; 11 char author[50]; 12 char subject[100]; 13 int book_id; 14 }; 15 16 int main( ) 17 { 18 Books Book1; // 定义结构体类型 Books 的变量 Book1 19 Books Book2; // 定义结构体类型 Books 的变量 Book2 20 21 // Book1 详述 22 strcpy( Book1.title, "C++ 教程"); 23 strcpy( Book1.author, "Runoob"); 24 strcpy( Book1.subject, "编程语言"); 25 Book1.book_id = 12345; 26 27 // Book2 详述 28 strcpy( Book2.title, "CSS 教程"); 29 strcpy( Book2.author, "Runoob"); 30 strcpy( Book2.subject, "前端技术"); 31 Book2.book_id = 12346; 32 33 // 输出 Book1 信息 34 printBook( Book1 ); 35 36 // 输出 Book2 信息 37 printBook( Book2 ); 38 39 return 0; 40 } 41 void printBook( struct Books book ) 42 { 43 cout << "书标题 : " << book.title <<endl; 44 cout << "书作者 : " << book.author <<endl; 45 cout << "书类目 : " << book.subject <<endl; 46 cout << "书 ID : " << book.book_id <<endl; 47 }
结构体指针:
您可以定义指向结构的指针,方式与定义指向其他类型变量的指针相似,如下所示:
struct Books *struct_pointer;
现在,您可以在上述定义的指针变量中存储结构变量的地址。为了查找结构变量的地址,请把 & 运算符放在结构名称的前面,如下所示:
struct_pointer = &Book1;
为了使用指向该结构的指针访问结构的成员,您必须使用 -> 运算符,如下所示:
struct_pointer->title;
例子:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <iostream> 2 #include <cstring> 3 4 using namespace std; 5 void printBook( struct Books *book ); 6 7 struct Books 8 { 9 char title[50]; 10 char author[50]; 11 char subject[100]; 12 int book_id; 13 }; 14 15 int main( ) 16 { 17 Books Book1; // 定义结构体类型 Books 的变量 Book1 18 Books Book2; // 定义结构体类型 Books 的变量 Book2 19 20 // Book1 详述 21 strcpy( Book1.title, "C++ 教程"); 22 strcpy( Book1.author, "Runoob"); 23 strcpy( Book1.subject, "编程语言"); 24 Book1.book_id = 12345; 25 26 // Book2 详述 27 strcpy( Book2.title, "CSS 教程"); 28 strcpy( Book2.author, "Runoob"); 29 strcpy( Book2.subject, "前端技术"); 30 Book2.book_id = 12346; 31 32 // 通过传 Book1 的地址来输出 Book1 信息 33 printBook( &Book1 ); 34 35 // 通过传 Book2 的地址来输出 Book2 信息 36 printBook( &Book2 ); 37 38 return 0; 39 } 40 // 该函数以结构指针作为参数 41 void printBook( struct Books *book ) 42 { 43 cout << "书标题 : " << book->title <<endl; 44 cout << "书作者 : " << book->author <<endl; 45 cout << "书类目 : " << book->subject <<endl; 46 cout << "书 ID : " << book->book_id <<endl; 47 }
关于typedef的使用和c语言中差不多。但是C与C++结构体中前者不能有函数,后者可以有。
类与结构体在 C++ 中只有两点区别,除此这外无任何区别。
- (1)class 中默认的成员访问权限是 private 的,而 struct 中则是 public 的。
- (2)从 class 继承默认是 private 继承,而从 struct 继承默认是 public 继承。
- (3)class 可以定义模板,而 struct 不可以。