ساختارها در زبان 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++ اولین بار در سورس سرا - آموزش برنامه نویسی. پدیدار شد.