Struct یکی از انواع ساختار داده است. این نوع توسط کاربر تعریف میشود. هدف از تعریف Struct، جمعآوری متغیرهایی با نوعهای مختلف در دستهبندی یکسان است. ساختار Struct را تا حدودی میتوان شبیه به کلاس در برنامه نویسی دانست. برای درک اینکه Struct چیست باید به سراغ زبان برنامه نویسی C برویم. انواع مختلفی مانند int و char و float در زبان C وجود دارند که میتوان از آنها برای تعریف متغیر و ذخیره داده استفاده کرد. همچنین آرایهها را داریم که برای دستهبندی مجموعهای از دادهها با نوع یکسان در کنار هم به کار برده میشوند. اما در دنیای واقعی، دادهها همیشه از یک نوع نیستند. به این دلیل است که ساختار Struct در زبان C معرفی شده است.
در این مطلب از مجله فرادرس توضیح دادهایم که Struct چیست و چه کاربردی دارد. ابتدا آن را تعریف کرده و سپس روش ساخت متغیرهای Struct را بیان کردیم. علاوه بر این موارد، چند مثال مختلف درباره استفاده از متغیرها و اشارهگرهای Structure را نیز همراه با مثال نمایش دادهایم.
Struct چیست؟
Structure در زبان C تقریبا مانند سایر انواع داده، مثل Integer و Float است. Struct، توسط کاربر تعریف شده و از روی انواع داده در زبان C مشتق میشود. برای تعریف کردن نوع سفارشی که عناصری با انواع مختلف را در یک دسته قرار میدهد از کلمه کلیدی struct استفاده میکنیم. تفاوتهای بین آرایه و Struct را در فهرست زیر ارائه کردهایم.
- آرایههای زبان C مجموعه همگنی از عناصر با نوع یکسان هستند.
- Structure میتواند عناصری با نوعهای مختلف را به صورت ذخیره شده در کنار یکدیگر جمعآوری کند.
- تمام عناصر درون Structure توسط نام مخصوص به خودشان شناخته میشوند.
اغلب اوقات نیاز داریم که با مقادیری از انواع مختلف کار کنیم. این مقادیر معمولا روابط مشخصی با یکدیگر دارند. برای مثال، کتابها را میتوان توسط تیتر، نام نویسنده، قیمت، تعداد صفحات و غیره توصیف کرد. در این توصیف، برای تعریف تیتر و نام نویسنده از نوع استرینگ در برنامه نویسی استفاده میکنیم. به همین ترتیب، معمولا قیمت با نوع Double در برنامه نویسی و تعداد صفحات هم با نوع عدد صحیح تعریف میشوند. در بعضی از زبانهای برنامه نویسی – مانند زبان C – برای تعریف اشياء دارای چنین صفاتی بهجای استفاده از چهار متغیر مختلف میتوان تمام این مقادیر را در Struct جمع کرده و متغیری با Struct تعریف کرد.
در بخش بعد میبینیم که روش تعریف متغیر Struct چیست.
روش تعریف و ساخت Struct چیست؟
برای تعریف Structure در زبان C باید از کلمه کلیدی struct استفاده کنیم. بعد از آن هم structure tag یا نام Structure مورد نظر را مینویسیم. سپس تمام اعضای درون این Structure را داخل آکولادهای باز و بسته همراه با نوع مربوط به هر کدام تعریف میکنیم.
همینطور که اشاره کردیم برای تعریف Structure باید از عبارت struct استفاده کنیم. عبارت struct نوع جدیدی را تعریف میکند. نوعی که خودش از چندین نوع مختلف تشکیل شده است.
سینتکس تعریف Struct
در این بخش از مطلب، سینتکس مورد استفاده برای تعریف struct را نمایش دادهایم.
در ساختار بالا وجود structure tag اختیاری است. همچنین تمام اعضا مانند عملیات عادی تعریف متغیر، تعریف میشوند. برای مثال، میتوان به کدهایی مانند int i; یا float f; یا سایر روشهای معتبر برای تعریف متغیر، اشاره کرد.
در آخر تعریف Structure و قبل از آخرین سمیکالون«; » میتوانیم یک یا چند نمونه از متغیر struct را ایجاد کنیم. اما این بخش هم اختیاری است.
مثالی برای تعریف Struct
در مثال پایین، ساختاری را برای کتاب تعریف میکنیم. در این struct مهمترین جزئیات مربوط به کتاب را ذخیره میکنیم.
همینطور که در کد بالا مشاهده میکنید، بعد از تعریف کردن ساختار book، متغیری به نام book1 را با این ساختار ایجاد کردهایم. البته میتوان برای تعریف متغیر به صورت جداگانه و در عبارتهای دیگری هم اقدام کرد.
توجه: تعریف book به معنای تعریف نوع جدیدی است که نمونههای آن از جنس کتاب هستند. وقتی متغیری از این نوع تعریف میکنیم، انگار کتاب مشخصی را تعریف کردهایم. به همین صورت برای انجام کارها فقط میتوان از book1 استفاده کرد و نه book.
آشنایی با فیلم های آموزشی فرادرس برای برنامه نویسی با زبان C
زبان برنامه نویسی C، یکی از مهمترین زبانهای برنامه نویسی در دنیاست. این زبان سالهاست که سهم زیادی از بازار طراحی و تولید نرمافزارها و برنامههای حرفهای را در دست خود نگهداشته. به دلیل توانایی برقرار کردن ارتباط مستقیم با لایههای سختافزار کامپیوتر توسط زبان برنامه نویسی C از آن در طراحی و مدیریت انواع سیستمهای سختافزاری و سیستم عاملها استفاده میشود. حتی بعضی از دیگر زبانهای برنامه نویسی نیز با کمک زبان C توسعه داده شدهاند. به همین دلیل معمولا افراد علاقهمند به آموزش برنامه نویسی، زبان C را به عنوان یکی از اولین گزینههای آموزشی انتخاب میکنند.
تقریباً بیشتر سیستمهای عامل به زبان C نوشته شدهاند. اغلب کامپیوترها، گوشیهای هوشمند و تبلتها سیستم عامل مبتنی بر زبان C دارند. زبانهای برنامه نویسی مانند ++C و Objective C و #C و حتی زبان برنامهنویسی «پایتون» (Python) و چندین زبان دیگر نیز به وسیله آن نوشته شدهاند. بنابراین فرادرس به عنوان تولیدکننده فیلمها و مطالب آموزشی و علمی تلاش کرده است تا مجموعه آموزش حرفهای را برای این زبان فراهم کند. در نتیجه علاقهمندان به برنامهنویسی میتوانند با کمک فرادرس، زبان C را یاد بگیرند. در پایین چند مورد از فیلمهای آموزشی زبان C را معرفی کردهایم.
ایجاد متغیر با Struct
برای دسترسی و مقداردهی به اعضای درون Structure، ابتدا باید متغیری را برای آن ایجاد کنیم. برای ساختن متغیر با Structure، ابتدا باید کلمه کلیدی struct را بنویسیم. سپس نام خود Structure نوشته میشود. در نهایت هم باید نامی را بنویسیم که برای متغیر در نظر گرفتهایم. با استفاده از متغیر Structure ساخته شده میتوانیم به تمام اعضای درون struct دسترسی داشته و مقدار آنها را تغییر دهیم.
برای آموزش روش کار با Structure در زبان سی میتوانیم از بررسی روش استفاده از آن در زبان ++C هم استفاده کنیم. زیرا این زبانها از لحاظ ساختاری و مفهومی نزدیکی بسیار زیادی به هم دارند. هر چند شاید از لحاظ سینتکس دارای تفاوتهای جزئی باشند. به همین منظور پیشنهاد میکنیم که فیلم آموزش رایگان نوع شمارشی، استراکچر و یونیون در برنامه نویسی C++ را از فرادرس مشاهده کنید. به منظور کمک به مخاطبان مجله، لینک این فیلم را در پایین نیز قرار دادهایم.
مثالی برای ایجاد متغیر با Struct
در این بخش از مطلب، برای ساخت متغیر struct مثالی را پیادهسازی کردهایم. کدی که در زیر آمده روش ساخت متغیر را نشان میدهد.
معمولا Structure-ها قبل از نوشتن اولین تابع و دقیقا بعد از عبارتهای include تعریف میشوند. با این روش میتوان از این نوع جدید – مشتق شده از چند نوع مختلف – برای ساختن متغیرهایش در تمام توابع استفاده کرد.
مقداردهی به Struct
برای مقداردهی به Structure فقط کافی است که مقدار مربوط به تمام عناصر را درون آکولادهای باز و بسته قرار دهیم.
مثالی برای مقداردهی به Struct
در کادر زیر، کد مربوط به مقداردهی متغیر book1 را نوشتهایم. این متغیر از Structure ساخته شده است. این کد ساختار ثابتی دارد. فقط تعداد مقدارها، نوع و محتوای آنها به صورت فرضی تعریف شدهاند.
روش دسترسی به اعضای درون Struct چیست؟
برای دسترسی به اعضای درون Struct، در ابتدا باید نمونهای از متغیر با Struct تعریف کنیم. بعد از نوشتن نام متغیر، عملگر نقطه «.» را قرار میدهیم. بعد از نقطه هم میتوانیم نام اعضای مختلف را قرار بنویسیم.
مثال اول برای دسترسی به اعضای درون Struct
در بخش بالا متغیر book1 از Structstruct book تعریف شده است. تمام چهار عضو درون این متغیر با استفاده از عملگر نقطه «.» قابل دسترسی هستند. یعنی اینکه book1.title اشاره به عنصر تیتر کتاب دارد. مقدار book1.author اشاره به نام نویسنده کتاب دارد و عبارت book1.price هم به قیمت کتاب اشاره میکند. در آخر هم با استفاده از چهارمین عنصر به نام book1.pages تعداد صفحات کتاب ذخیره کرده یا اعلام میکنیم.
در مثال زیر، روش دسترسی به تمام اعضای ساختار book نشان داده شده است.
کد بالا را اجرا کرده و خروجی را مشاهده کنید. بعد از اجرای کد بالا باید خروجی به شکل زیر به کاربر نشان داده شود.
Title: Learn C Author: Dennis Ritchie Price: 675.500000 Pages: 325 Size of book struct: 48
مثال دوم برای دسترسی به اعضای درون Struct
در برنامه مثال قبل، تغیرات کوچکی را در ساختار تعریف شده ایجاد کردیم. در این بخش میخواهیم عملیات مربوط به تعریف نوع را همراه با عملیات مربوط به ایجاد متغیر به صورت همزمان اجرا کنیم. این تکنیک را در کدهای زیر نمایش دادهایم.
توجه کنید که اگر متغیر struct را به روش بالا تعریف کنیم، دیگر نمیتوانیم با استفاده از آکولادهای باز و بسته به آن مقداردهی کنیم. در عوض باید تمام مقدارهای مربوط به تمام عناصر را به صورت یک به یک به آنها تخصیص بدهیم.
بعد از اجرای کدهای بالا، خروجی زیر تولید شده و در کنسول به کاربر نمایش داده میشود.
Title: Learn C Author: Dennis Ritchie Price: 675.500000 Pages: 325
کپی کردن Structure
با استفاده از عملگر تخصیص «=» یا همان مساوی میتوان هر Structure را به صورت مستقیم کپی کرد. همچنین میتوانید از عملگر تخصیص برای اختصاص دادن مقدار یکی از اعضای Structure به همان عضو متناظر در Structure دیگری استفاده کنید.
فرض کنیم که از Struct تعریف شده برای کتاب دو متغیر با نامهای book1 و book2 ایجاد کردهایم. متغیر book1 را همزمان با تعریف مقداردهی کردیم. اکنون تصمیم گرفتهایم تا همان مقدارها را به اعضای درون متغیر book2 هم تخصیص بدهیم.
برای انجام این کار – همینطور که در کد زیر نمایش دادهایم – میتوان عناصر را به صورت مجزا برابر با یکدیگر قرار داد.
مثال کپی کردن Structure
فرض کنیم از روی Struct یکسانی چند متغیر مختلف تولید کردهایم. یکی دیگر از روشهای کپی کردن دادههای آن متغیرها، مساوی هم قرار دادن آنها است. با این کار مقدارهای مربوط به هر عنصر در متغیر سمت راست مساوی به مقدار متناظر با خودش در متغیر سمت چپ مساوی اختصاص داده میشود. در کد زیر، با استفاده از این روش، تمام اطلاعات متغیر book1 را در عناصر متناظر در متغیر book2 کپی کردهایم.
بعد از اجرای کدهای بالا، خروجی زیر تولید شده و در کنسول به کاربر نمایش داده میشود.
Title: Learn C Author: Dennis Ritchie Price: 675.500000 Pages: 325 Size of book struct: 48
استفاده از Struct به عنوان آرگومان تابع
روش استفاده از Structure-ها به عنوان آرگومان تابع دقیقا مانند روش استفاده از سایر متغیرها و «اشارهگر» (Pointers) است.
در این بخش از مطلب این مسئله را با کمک مثال مناسبی توضیح دادایم.
مثالی برای استفاده از Structure به عنوان آرگومان تابع
در کدهای زیر، ابتدا struct Books را تعریف کردیم. به چند نکته توجه کنید.
- برای مقدار دادن به اعضای struct از تابع strcpy() استفاده کردیم.
- داخل بدنه اصلی برنامه، در زمان ارسال متغیر struct به تابع تعریف شده، فقط نام متغیر را بردهایم.
- در زمان تعریف خود تابع – بعد از بدنه اصلی برنامه – نام struct و متغیر آن را با عبارت struct Books book و به شکل کامل استفاده کردهایم.
بعد از اجرای کدهای بالا، خروجی زیر تولید شده و در کنسول به کاربر نمایش داده میشود.
Book title : C Programming Book author : Nuha Ali Book subject : C Programming Tutorial Book book_id : 6495407 Book title : Telecom Billing Book author : Zara Ali Book subject : Telecom Billing Tutorial Book book_id : 6495700
Structureهای تودرتو
Structure تودرتو یعنی اینکه از یک یا چند متغیر Structure درون Structure دیگری استفاده کنیم. همینطور که میتوانیم در Struct-ها اعضایی با نوعهای int و char داشته باشیم، از متغیری با Struct هم میتوان به عنوان یکی از اعضای struct دیگر استفاده کرد.
در زبان برنامه نویسی C، نوعهای مختلفی برای دادهها تعریف شدهاند که برنامه نویس با توجه به موقعیت از بین آنها انتخاب میکند. تمام این نوعها را میتوان به عنوان اعضای درون Structure تعریف کرد. برای آشنا شدن با انواع داده در زبان C میتوانید به مطلب مربوط به آن در مجله فرادرس مراجعه کنید.
در کدهای بالا میبینیم که ساختار متغیر birthday از Structstruct birth است. این متغیر درون struct student به صورت تودرتو قرار گرفته است. نکته مهم اینجاست که نمیتوان از متغیری با Structstruct student به عنوان یکی از عناصر درون متغیر struct student استفاده کرد.
توجه کنید struct که به صورت تودرتو قرار میگیرد باید قبل از struct بیرونی تعریف شود. با استفاده از علامت نقطه «.» میتوانیم به struct تعریف شده در داخل struct بیرونی دسترسی داشته باشیم. دقیقا همانطور که به بقیه اعضا دسترسی داریم.
چند متغیر struct با هر نوعی، در کنار هم میتوانند به عنوان عضو درونی متغیر struct دیگر استفاده شوند.
روش استفاده از اشاره گرها در مقابل Struct چیست؟
همینطوری که در زبان C با استفاده از اشارهگرها به بقیه متغیرها اشاره میکنیم، به متغیرهای struct هم میتوان اشاره کرد.
در این بخش ابتدا روش تعریف اشارهگری را نشان میدهیم که به struct اشاره میکند.
تعریف اشاره گر برای Struct
در کادر زیر، سینتکس مربوط به تعریف اشارهگر به ساختار struct را نمایش دادهایم.
مقداردهی اشاره گر با استفاده از Struct
فرض کنیم که – مانند کد بالا – اشارهگری به نام struct_pointer تعریف کردهایم. به سادگی میتوان آدرس مربوط به متغیر Structure را درون متغیر اشارهگر ذخیره کرد. برای پیدا کردن آدرس متغیر Structure فقط کافی است که قبل از نام Structure از علامت «&» استفاده کنیم.
در برنامه نوشته شده در کادر زیر، ابتدا Struct با نام book تعریف کردهایم. سپس از روی آن متغیری به نام book1 ایجاد و مقداردهی کردیم. در خط آخرهم اشارهگری با نام strptr تعریف کردیم. این اشارهگر میتواند آدرس متغیر book1 را در خود ذخیره کند.
استفاده از اشاره گر Struct برای دسترسی به اعضا
برای اینکه با استفاده از اشارهگر struct_pointer به اعضای تعریف شده در آن struct دسترسی داشته باشیم، باید از عملگر → استفاده کنیم. در کد زیر روش انجام این کار نمایش داده شده است.
زبان برنامه نویسی C، نماد → را تعریف کرده تا برای اشاره به اشارهگر Struct به کار برده شود. این نوع از عملگرها با نام «عملگر غیرمستقیم» (Indirection Operator) شناخته میشوند. البته از نام «عملگر عدم ارجاع» (Dereference Operator) هم برای این عملگر اختصاصی struct استفاده میشود.
مثال برای استفاده از اشاره گر Struct
در مثال زیر، strptr اشارهگری است که به متغیر struct book book1 اشاره میکند. بنابراین عبارت strrptr→title برای برگرداندن تیتر یا عنصر title از درون متغیر struct به کار برده میشود. عبارت strrptr→title دقیقا همان کاری را میکند که عبارت book1.title انجام میدهد.
بعد از اجرای کدهای بالا، خروجی زیر تولید شده و در کنسول به کاربر نمایش داده میشود.
Title: Learn C Author: Dennis Ritchie Price: 675.500000 Pages: 325
توجه: عملگر «.» برای دسترسی به عناصر struct و با استفاده از متغیر struct استفاده میشود. اما اگر بخواهیم که به عناصر struct از طریق اشارهگری دسترسی پیدا کنیم که آدرس آن را ذخیره کرده است، باید از عملگر «غیرمستقیم» (-> ) استفاده کنیم.
متغیرهای struct هم مانند متغیرهای معمولی هستند که با نوعهای اصلی تعریف شدهاند. یعنی اینکه تمام موارد نوشته شده در فهرست زیر را میتوانیم انجام دهیم.
- میتوان آرایهای با عناصر از جنس Struct ایجاد کرد.
- میتوان متغیر struct را به عنوان پارامتر به توابع ارسال کرد.
- میتوان از متغیرهای struct به عنوان مقدار برگشتی توابع استفاده کرد.
- و غیره
توجه: همیشه در زمان تعریف متغیرها یا اشارهگرهای Struct باید از Struct به عنوان پیشوند نام در آن عبارت استفاده کنیم.
از متغیرهای Struct میتوان به منظور اجرای کارهای مختلفی استفاده کرد. برای مثال میتوانیم به پایگاههای داده، سیستمهای مدیریت فایل و مدیریت ساختارهای داده پیچیدهای مانند درختها و لیستهای پیوندی اشاره کنیم.
بیت فیلد
«بیت فیلد» (Bit Fields) به بستهبندی دادهها در Structure کمک میکنند. به طور خاص در زمانهایی که باید در مصرف حافظه یا فضای ذخیرهسازی دادهها صرفهجویی کرد، استفاده از این تکنیک بسیار مفید است. دو مورد از رایجترین مثالهای این مسئله را در فهرست زیر بیان کردهایم.
- بستهبندی چندین شیء مختلف در یک «کلمه ماشین» (Machine Word): برای نمونه، فلگهای تکبیتی را میتوان در یک واحد حافظه دستهبندی کرد.
- خواندن فرمت فایلهای خارجی: با کمک این روش میتوان فرمتهای غیراستانداردی مانند اعداد صحیح ۹ بیتی را مدیریت کرد.
تعریف فیلد بیتی
زبان برنامه نویسی C به توسعهدهندگان کمک میکند که در تعریف Structure، فیلد بیتی ایجاد کنیم. برای انجام این کار بعد از نام متغیر باید طول بیتی آن را هم مشخص کنیم. در کدهای زیر، روش تعریف بیت فیلد را درون ساختار struct نمایش دادهایم.
در کد بالا، متغیر packed_struct شامل ۶ عضو است. ۴ مورد از آنها – از f1 تا f4 - فلگهای تکبیتی هستند. یک عضو ۴ بیتی به نام type و یک عضو ۹ بیتی با نام my_int هم دارد.
زبان C به شکل خودکار این بیت فیلد را با هدف صرفهجویی در فضا بستهبندی میکند. البته به شرط آنکه بیشترین طول فیلد کمتر یا مساوی اندازه هر متغیر Integer در کامپیوتر شود. اگر این شرط برقرار نشده و فیلدی از این اندازه فراتر برود، بعضی از کامپایلرها شاید به حافظه اجازه بدهند که از فضای بخشهای دیگر استفاده کنند. در حالی که سایر کامپایلرها فیلد بعدی را در فضای حافظه جدیدی ذخیره میکنند.
مثال هایی از Struct در زبان های مختلف
تقریبا بیشتر زبانهای برنامه نویسی، برای گروهبندی چند متغیر از نوعهای مختلف در موجودیت یکسان، شامل ظرف خاصی هستند. این موجودیتها – چه اینکه با نام Struct شناخته شوند یا نامهای دیگر – کارکردی شبیه به یکدیگر دارند.
برای اینکه بدانیم نکته مهم در تعریف Struct چیست، باید به سینتکس آن توجه کنیم. در زبانهای مختلف سینتکسهای متفاوتی برای تعریف این موجودیت وجود دارند. در این بخش از مطلب، چند مثال مختلف از تعریف Struct یا ساختارهای شبیه به آن را در زبانهای برنامه نویسی مشهور نمایش دادهایم.
struct در زبان برنامه نویسی #C
ابتدا کدهای مربوط به تعریف Struct در زبان برنامه نویسی #C را نمایش دادهایم. در تمام مثالهای این بخش، ساختارهایی را برای نمایش بعضی از مشخصات انسانهای عادی ایجاد کردهایم. این مشخصات شامل، نام، سن و قد افراد است.
struct در زبان برنامه نویسی ++C
زبان برنامه نویسی ++C به غیر از ساختار Struct از ساختار کلاس هم پشتیبانی میکنید. در بخشهای بعدی به صورت خلاصه تفاوت بین Struct و کلاس در ++C را بیان کردهایم.
struct در زبان برنامه نویسی جاوا اسکریپت
زبان برنامه نویسی جاوا اسکریپت هم از این ساختار پشتیبانی میکند. در تمام این زبانهای برنامه نویسی تفاوت اندکی را در سینتکس مشاهده میکنیم. اما مفهوم همیشه یکسان است. مفهوم این ساختار به موجودیتی اشاره میکند که دادههای مرتبط با هم را در کنار هم و در یک گروه قرار میدهد.
struct در زبان برنامه نویسی پایتون
برای اینکه ببینیم در زبان برنامه نویسی پایتون، روش تعریف Struct چیست، باید به مفهوم کلاس توجه کنیم.
یادگیری C و C++ با کمک فیلم های آموزشی
++C زبان برنامه نویسی همهمنظوره و عمومی است که استفاده گستردهای در علوم کامپیوتر دارد. این زبان از مفاهیم شی گرایی، وراثت و پلی مورفیسم پشتیبانی میکند. C و C++ جزو زبانهای تخصصی برنامه نویسی هستند. سرعت بالا، قدرت زیاد و استحکام این زبانها باعث شده که علی رغم سن نسبتا بالای آنها در انجام پروژههای حساس جزو گزینههای اول باشند. فرصتهای شغلی زبانهای C و C++ در حال زیادتر شدناند و برنامه نویسان حرفهای را به خود جذب میکنند. به همین دلیل فرادرس با هدف پشتیبانی از افراد علاقهمند به زبانهای C و C++، فیلمهای آموزشی زیادی را تولید و منتشر کرده است. در پایین چند مورد از این فیلمها را معرفی میکنیم.
در صورت علاقه با کلیک بر روی تصویر بالا، به صفحه اصلی این مجموعه آموزشی رفته از فیلمهای بیشتری نیز دیدن کنید.
تفاوت کلاس و مجموعه با Struct چیست؟
همانند ساختار Struct دو مفهوم دیگر با نامهای «کلاس» (Class) و «مجموعه» (Union) وجود دارند. این مفاهیم برنامه نویسی هم میتوانند متغیرهای مختلف با نوع دادههای متفاوتی را در یک گروه دستهبندی کنند. در این بخش به بیان تفاوتهای بین این ساختارها با هم پرداختهایم.
تفاوت مجموعه با Struct چیست؟
هر دوی این ساختارها در زبان C وجود دارند. هر دوی این ساختارها انواع مختلف متغیرها را با نوعدادههای متفاوت تحت موجودیتی با نام یکسان جمعآوری میکنند. اما در زمان ذخیرهسازی دادها رفتار متفاوتی از خود نشان میدهند. تفاوت اصلی درباره روش ذخیرهسازی دادهها است. در فهرست زیر، تفاوت این ساختارها با یکدیگر را به صورت خلاصه بیان کردهایم.
- تعریف: هم مجموعه و هم Struct نوعهای تعریف شده توسط کاربر هستند. Struct برای دستهبندی نوعهای مختلف در یک موجودیت به کار برده میشود. اما مجموعه به ذخیرهسازی انواع مختلف در موقعیت یکسانی از حافظه کمک میکند.
- کلمه کلیدی: برای تعریف Struct از کلمه کلیدی struct استفاده میشود. برای تعریف نوع مجموعه هم کلمه کلیدی union به کار برده میشود.
- اندازه: اندازه هر موجودیت Struct برابر با مجموعه اندازههای تمام اعضای درون آن بهعلاوه فضای اضافی – البته در صورت نیاز – برای تمیز دادن دادهها از هم است. اما اندازه هر موجودیت مجموعه برابر با اندازه بزرگترین عضو درون آن به علاوه فضای اضافی برای نمایش فاصله بین اعضا است.
تفاوت کلاس با Struct چیست؟
برای بررسی تفاوت کلاس با Struct باید به سراغ زبان ++C برویم. در زبان ++C عملکرد Struct و کلاس تقریبا شبیه به یکدیگر است. اما دو تفاوت کوچک وجود دارند. مهمترین این تفاوتها پنهانسازی جزئیات مربوط به پیادهسازی است. Struct-ها به صورت پیشفرض جزئیات مربوط به پیادهسازی خود را پنهان نمیکند. اما کلاسها به طور پیشفرض تمام جزئیات مربوط به پیادهسازی خود را پنهان میکنند. منظور از پنهانسازی در مقابل افرادی است که از این ساختارها در کدها استفاده میکنند.
در جدول زیر نشان دادهایم که تفاوتهای بنیادین بین کلاس و Struct چیست.
«کلاس» (Class) | Struct |
اعضای درون کلاس به صورت پیشفرض محرمانه هستند. | اعضای درون Struct به صورت پیشفرض عمومی و در دسترس همه هستند. |
برای تعریف کلاس از کلمه کلیدی class استفاده میشود. | برای تعریف Struct از کلمه کلیدی struct استفاده میشود. |
این ساختار معمولا برای انتزاعی ساختن موجودیتها با قابلیت ارثبری استفاده میشود. | معمولا برای قرار دادن نوعهای مختلف در یک گروه به کار برده میشود. |
سینکس مورد استفاده برای تعریف کلاس در زبان ++C به شکل زیر است.
سینتکس مورد استفاده برای تعریف Struct در زبان ++C به شکل زیر است.
جمعبندی
در این مطلب گفتیم که Struct چیست و فهمیدیم که یکی از ساختارهای برنامهنویسی است. این ساختار در زبان C برای کمک به ساخت نوعهای سفارشی توسط برنامهنویس تعریف شده است. ساختار Struct تا حدودی شبیه به ساختار کلاس در زبانهای شیءگرایانه است. ساختار Struct به توسعهدهندگان کمک میکند که متغیرهایی از انواع مختلف را در موجودیت یکسانی جمعآوری کنند. برای دانستن اینکه Struct چیست باید به چند نکته مهم توجه کنید. این موارد را به شکل خلاصه در فهرست زیر نوشتهایم.
- ظرف Struct شامل نوعهای مختلف در برنامه نویسی میشود.
- نظم اعضای تعریف شده درون Struct مهم است.
- هر عنصر درون Struct دارای نوع مشخصی است.
- تمام این عناصر در کنار هم قرار گرفته و موجودیت جدیدی را تشکیل میدهند.
در این مطلب از مجله فرادرس فهمیدیم که Struct چیست و چگونه تعریف میشود. سینتکس مورد نیاز برای نوشتن متغیر Struct را نمایش دادیم. ساختارهای Struct تودرتو را بررسی کرده و روش ارسال Struct به عنوان پارامتر به توابع را نیز نشان دادهایم.
source