ساختارها در زبان C++ – آموزش زبان C++

۱۳۹۷-۰۹-۰۱
ساختارها در زبان C++ ساختارها مشابه آرایه ها هستند با این تفاوت که در آرایه ها فقط می توانید یک نوع داده داشته باشید. یعنی همه عناصر آرایه باید از این نوع باشند. اما ساختارها اجازه می دهد تا انواع داده مختلف را در یک مجموعه قرار دهیم. از ساختار برای نشان دادن یک رکورد استفاده می شود. فرض کنید می ...

cpp data structures 4465 ساختارها در زبان C++   آموزش زبان C++

ساختارها در زبان C++

ساختارها مشابه آرایه ها هستند با این تفاوت که در آرایه ها فقط می توانید یک نوع داده داشته باشید. یعنی همه عناصر آرایه باید از این نوع باشند. اما ساختارها اجازه می دهد تا انواع داده مختلف را در یک مجموعه قرار دهیم. از ساختار برای نشان دادن یک رکورد استفاده می شود. فرض کنید می خواهید کتاب های خود را در یک کتابخانه نگه داری کنید. ممکن است بخواهد اطلاعات زیر را در مورد هر کتاب ذخیره کنید:

  • عنوان (Title)
  • نویسنده (Author)
  • موضوع (Subject)
  • شناسه (Id)

تعریف یک ساختار

برای تعریف یک ساختار باید از کلمه کلیدی struct استفاده کنید. شکل کلی تعریف یک ساختار را در زیر مشاهده می کنید:

struct [structure tag] {
   member definition;
   member definition;
   ...
   member definition;
} [one or more structure variables];

بخش structure tag اختیاری است و تعریف عضوهای ساختار مانند تعریف متغیرهای عادی می باشد. بعد از } و قبل از سمی کالن می توانید متغیرهای خود را که از نوع ساختار خواهند را تعریف کنید. در زیر نحوه تعریف ساختار Book را مشاهده می کنید:

struct Books {
   char  title[50];
   char  author[50];
   char  subject[100];
   int   book_id;
} book;

دسترسی به اعضای ساختار

به منظور دسترسی به اعضای یک ساختار می توانید از عملگر (.) استفاده کنید. در هنگام تعریف یک متغیر از نوع ساختار باید از کلمه کلیدی struct استفاده کنید. به مثال زیر توجه کنید:

#include <iostream>
#include <cstring>
using namespace std;
struct Books {
   char  title[50];
   char  author[50];
   char  subject[100];
   int   book_id;
};
int main() {
   struct Books Book1;        // Declare Book1 of type Book
   struct Books Book2;        // Declare Book2 of type Book
   // book 1 specification
   strcpy( Book1.title, "Learn C++ Programming");
   strcpy( Book1.author, "Chand Miyan"); 
   strcpy( Book1.subject, "C++ Programming");
   Book1.book_id = 6495407;
   // book 2 specification
   strcpy( Book2.title, "Telecom Billing");
   strcpy( Book2.author, "Yakit Singha");
   strcpy( Book2.subject, "Telecom");
   Book2.book_id = 6495700;
   // Print Book1 info
   cout << "Book 1 title : " << Book1.title <<endl;
   cout << "Book 1 author : " << Book1.author <<endl;
   cout << "Book 1 subject : " << Book1.subject <<endl;
   cout << "Book 1 id : " << Book1.book_id <<endl;
   // Print Book2 info
   cout << "Book 2 title : " << Book2.title <<endl;
   cout << "Book 2 author : " << Book2.author <<endl;
   cout << "Book 2 subject : " << Book2.subject <<endl;
   cout << "Book 2 id : " << Book2.book_id <<endl;
   return 0;
}

امتحان کنید

زمانی که کد بالا توسط کامپایلر زبان C++ اجرا شود، نتیجه زیر را تولید خواهد کرد:

Book 1 title : Learn C++ Programming
Book 1 author : Chand Miyan
Book 1 subject : C++ Programming
Book 1 id : 6495407
Book 2 title : Telecom Billing
Book 2 author : Yakit Singha
Book 2 subject : Telecom
Book 2 id : 6495700

ساختار به عنوان آرگومان تابع

شما می توانید یک ساختار را مثل متغیرهای عادی و اشاره گرها به یک تابع ارسال کنید:

#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() {
   struct Books Book1;        // Declare Book1 of type Book
   struct Books Book2;        // Declare Book2 of type Book
   // book 1 specification
   strcpy( Book1.title, "Learn C++ Programming");
   strcpy( Book1.author, "Chand Miyan"); 
   strcpy( Book1.subject, "C++ Programming");
   Book1.book_id = 6495407;
   // book 2 specification
   strcpy( Book2.title, "Telecom Billing");
   strcpy( Book2.author, "Yakit Singha");
   strcpy( Book2.subject, "Telecom");
   Book2.book_id = 6495700;
   // Print Book1 info
   printBook( Book1 );
   // Print Book2 info
   printBook( Book2 );
   return 0;
}
void printBook( struct Books book ) {
   cout << "Book title : " << book.title <<endl;
   cout << "Book author : " << book.author <<endl;
   cout << "Book subject : " << book.subject <<endl;
   cout << "Book id : " << book.book_id <<endl;
}

امتحان کنید

زمانی که کد بالا کامپایل و اجرا شود، نتیجه زیر را تولید خواهد کرد:

Book title : Learn C++ Programming
Book author : Chand Miyan
Book subject : C++ Programming
Book id : 6495407
Book title : Telecom Billing
Book author : Yakit Singha
Book subject : Telecom
Book id : 6495700

اشاره گر به ساختار

تعریف اشاره گر به ساختار مانند تعریف اشاره گر به یک متغیر عادی می باشد:

struct Books *struct_pointer;

حال می توانید آدرس متغیر ساختاری خود را در اشاره گر بالا ذخیره کنید. برای پیدا کردن آدرس یک متغیر ساختاری از عملگر & استفاده کنید:

struct_pointer = &Book1;

برای دسترسی به اعضای یک ساختار از طریق یک اشاره گر به آن ساختار باید از عملگر (->)  استفاده کنید. مانند نمونه زیر:

struct_pointer->title;

مثال فوق را با استفاده از اشاره گر به ساختار تغییر می دهیم:

#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() {
   struct Books Book1;        // Declare Book1 of type Book
   struct Books Book2;        // Declare Book2 of type Book
   // Book 1 specification
   strcpy( Book1.title, "Learn C++ Programming");
   strcpy( Book1.author, "Chand Miyan"); 
   strcpy( Book1.subject, "C++ Programming");
   Book1.book_id = 6495407;
   // Book 2 specification
   strcpy( Book2.title, "Telecom Billing");
   strcpy( Book2.author, "Yakit Singha");
   strcpy( Book2.subject, "Telecom");
   Book2.book_id = 6495700;
   // Print Book1 info, passing address of structure
   printBook( &Book1 );
   // Print Book1 info, passing address of structure
   printBook( &Book2 );
   return 0;
}
// This function accept pointer to structure as parameter.
void printBook( struct Books *book ) {
   cout << "Book title : " << book->title <<endl;
   cout << "Book author : " << book->author <<endl;
   cout << "Book subject : " << book->subject <<endl;
   cout << "Book id : " << book->book_id <<endl;
}

امتحان کنید

زمانی که کد بالا کامپایل و اجرا شود، نتیجه زیر را تولید خواهد کرد:

Book title : Learn C++ Programming
Book author : Chand Miyan
Book subject : C++ Programming
Book id : 6495407
Book title : Telecom Billing
Book author : Yakit Singha
Book subject : Telecom
Book id : 6495700

کلمه کلیدی typedef

یک روش ساده تر برای ایجاد ساختار ها استفاده از دستور typedef می باشد که با استفاده از آن می توان یک نام مستعار برای یک ساختار تعریف کرد. به مثال زیر توجه کنید:

typedef struct {
   char  title[50];
   char  author[50];
   char  subject[100];
   int   book_id;
} Books;

حال می توانید به طور مستقیم از Books به منظور ایجاد متغیرهایی از نوع ساختار Books استفاده کنید (بدون استفاده از struct). مانند نمونه زیر:

Books Book1, Book2;

با استفاده از typedef می توان برای سایر انواع داده ها نیز نام مستعار تعریف کرد:

typedef long int *pint32;
pint32 x, y, z;

متغیرهای x، y و z هر سه از نوع اشاره گر به long int هستند.

نوشته ساختارها در زبان C++ – آموزش زبان C++ اولین بار در سورس سرا - آموزش برنامه نویسی. پدیدار شد.