ساختار ها در C++

آرایه ها در C++ به شما اجازه می دهند تا متغیرهایی که از یک نوع هستند را با هم ترکیب کنید، اما ساختار ها در c++ نوع دیگری از ابزار تعریف داده هستند که با استفاده از آن می توانید داده هایی از نوع مختلف را با یکدیگر ترکیب کنید. ساختارها همچنین برای نمایش یک رکورد استفاده می شوند.

برای مثال تصور کنید که می‌خواهید کتاب‌های خود را در یک کتابخانه نگهداری کنید و بخواهید ویژگی‌های زیر را برای هر کتاب در نظر بگیرید:

  • عنوان
  • نویسنده
  • موضوع
  • شناسه کتاب
  • تعریف یک ساختار 

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

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

بخش structure tag و تعریف متغیر های ساختار همانند تعریف یک متغیرعادی مانند int i; یا float f; و یا هر نوع داده دیگر است. در انتهای تعریف ساختار و قبل از آخرین سمیکالن می توانید متغیرهای خود که از نوع ساختار هستند را تعریف کنید، اما این کار کاملاً اختیاری است. مثال زیر نحوه اعلان ساختار 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;
}

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

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

 روش ساده تری برای تعریف ساختارها وجود دارد که می توانید با استفاده از نوع 'alias' آنها را تعریف کنید:

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

اکنون می توانید به طور مستقیم Books را برای تعریف متغیرهای آن بدون استفاده از کلمه کلیدی struct استفاده کنید. به مثال زیر توجه کنید:

Books Book1, Book2;

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

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

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


 

برای درج نظر و یا طرح سوالات خود لطفا در سایت ثبت نام کنید و یا وارد سایت شوید

نظرات کاربران

3 سال پیش

روح اله احمدی

سلام
آموزش هاتون سبک جالبی دارن
ساده و کاربردی مطلب رو میگین، بدون زیاده گویی

ممنونم
منتظر ادامه مباحث هستم

برای این مطلب تاکنون نظری ارسال نشده است. شما اولین نفر باشید