در این جلسه از آموزش زبان ++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 هستند.
منبع: ترجمه از سایت tutorialspoint.com
امیدواریم آموزش ساختاردادهها در ++C برایتان مفید واقع شده باشه. در جلسه بعدی آموزش ++C با ما همراه باشید.
اگر این نوشته برایتان مفید بود لطفا کامنت بنویسید.