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

در این جلسه از آموزش زبان ++C به بررسی ساختارداده‌ها در ++C می پردازیم. ++C با تعریف آرایه‌ها به شما این اجازه را می‌داد که چندین داده هم نوع را یک جا ترکیب کنید، اما ساختار (Structure) نوع داده‌ای تعریف شده توسط کاربر است که اجازه می‌دهد که داده‌هایی از انواع مختلف را باهم ترکیب کنید.

مثلاً اگر بخواهید آمار کتابهای موجود در کتابخانه‌تان را داشته باشید، ساختارها می‌توانند بیان کننده یک رکورد باشند. مثلاً ممکن است بخواهید ویژگی‌های زیر از هر کتاب را ذخیره کنید.

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

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

برای تعریف یک ساختار، باید از دستور 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

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

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

منبع: ترجمه از سایت tutorialspoint.com

امیدواریم آموزش ساختارداده‌ها در ++C برایتان مفید واقع شده باشه. در جلسه بعدی آموزش ++C با ما همراه باشید.

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

مطالعه دیگر جلسات این آموزش<< جلسه قبلی                    جلسه بعدی >>

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *