c++中結構體的使用


文章鏈接:

結構體定義:

1 struct Books
2 {
3    char  title[50];
4    char  author[50];
5    char  subject[100];
6    int   book_id;
7 } book;
View Code

訪問結構體成員:

 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 }
View Code

結構作為函數參數:

 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 }
View Code

結構體指針:

您可以定義指向結構的指針,方式與定義指向其他類型變量的指針相似,如下所示:

  struct Books *struct_pointer;
現在,您可以在上述定義的指針變量中存儲結構變量的地址。為了查找結構變量的地址,請把 & 運算符放在結構名稱的前面,如下所示:

  struct_pointer = &Book1;
為了使用指向該結構的指針訪問結構的成員,您必須使用 -> 運算符,如下所示:

  struct_pointer->title;

例子:

 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 }
View Code

關於typedef的使用和c語言中差不多。但是C與C++結構體中前者不能有函數,后者可以有。

類與結構體在 C++ 中只有兩點區別,除此這外無任何區別

  • (1)class 中默認的成員訪問權限是 private 的,而 struct 中則是 public 的。
  • (2)從 class 繼承默認是 private 繼承,而從 struct 繼承默認是 public 繼承。
  • (3)class 可以定義模板,而 struct 不可以。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM