ساختارها و کلاسها در ++C
در ++C، ساختارها (Structures) و کلاسها (Classes) بهعنوان ابزارهایی برای ایجاد نوع دادههای جدید استفاده میشوند. این دو مفهومی مشابه دارند، اما تفاوتهایی نیز بین آنها وجود دارد. در اینجا، به بررسی هر دو خواهیم پرداخت.
۱. ساختارها (Structures)
ساختارها در ++C به شما این امکان را میدهند که مجموعهای از دادههای مختلف را در یک واحد ترکیب کنید. ساختارها میتوانند انواع دادههای مختلف (مثل int، float، char و غیره) را در خود نگهدارند.
تعریف ساختار:
برای تعریف یک ساختار در ++C از کلمه کلیدی struct استفاده میکنیم. ساختار شامل متغیرهای مختلفی است که به آنها اعضاء ساختار گفته میشود.
type member1;
type member2;
// سایر اعضا
};
مثال:
using namespace std;
struct Person {
string name;
int age;
float height;
};
int main() {
Person p1; // تعریف یک متغیر از نوع Person
// مقداردهی به اعضای ساختار
p1.name = "علی";
p1.age = 25;
p1.height = 1.75;
// دسترسی به اعضای ساختار
cout << "نام: " << p1.name << endl;
cout << "سن: " << p1.age << endl;
cout << "قد: " << p1.height << " متر" << endl;
return 0;
}
ویژگیها:
- ساختارها بهطور پیشفرض در ++C دارای دسترسی public هستند.
- اعضای یک ساختار میتوانند از انواع مختلف دادهها باشند.
۲. کلاسها (Classes)
کلاسها در ++C مشابه ساختارها هستند، با این تفاوت که کلاسها میتوانند شامل متدها (توابع) و کنترل دسترسی برای اعضای خود باشند. در کلاسها، اعضای دادهای (متغیرها) و توابع میتوانند بهطور خصوصی (private) یا عمومی (public) تنظیم شوند.
تعریف کلاس:
کلاسها با استفاده از کلمه کلیدی class تعریف میشوند. در یک کلاس، معمولاً اعضای داده و متدها را در کنار هم قرار میدهیم.
public:
// اعضای عمومی (public)
type member1;
type member2;
// توابع عمومی (public)
void function() {
// عملیاتی که باید انجام شود
}
private:
// اعضای خصوصی (private)
type member3;
};
مثال:
using namespace std;
class Person {
public:
string name;
int age;
// متد (تابع عضو)
void introduce() {
cout << "سلام! من " << name << " هستم و " << age << " سال دارم." << endl;
}
private:
float height; // این عضو فقط در داخل کلاس قابل دسترسی است
public:
void setHeight(float h) { // متد برای تنظیم قد
height = h;
}
float getHeight() { // متد برای دریافت قد
return height;
}
};
int main() {
Person p1; // تعریف یک شی از نوع Person
// مقداردهی به اعضای عمومی
p1.name = "علی";
p1.age = 25;
// فراخوانی متد
p1.introduce();
// استفاده از متدهای خصوصی برای دسترسی به عضو private
p1.setHeight(1.75);
cout << "قد من: " << p1.getHeight() << " متر" << endl;
return 0;
}
ویژگیها:
- دسترسی به اعضای کلاس: در ++C، اعضای کلاس بهطور پیشفرض private هستند (برخلاف ساختارها که public هستند).
- متدها: کلاسها میتوانند شامل توابعی باشند که عملیاتهایی را روی دادههای کلاس انجام میدهند.
- کنترل دسترسی: میتوانیم از public، private و protected برای کنترل دسترسی به اعضای کلاس استفاده کنیم:
- public: اعضای این بخش در هر جایی از برنامه قابل دسترسی هستند.
- private: اعضای این بخش فقط از داخل خود کلاس قابل دسترسی هستند.
- protected: اعضای این بخش برای کلاسهای مشتقشده (وراثت) قابل دسترسی هستند.
۳. تفاوتهای اصلی بین ساختارها و کلاسها
- دسترسی پیشفرض: در ساختارها، اعضای داده بهطور پیشفرض public هستند، در حالی که در کلاسها، اعضای داده بهطور پیشفرض private هستند.
- عملکردها: در کلاسها میتوان توابع (متدها) تعریف کرد، در حالی که در ساختارها نمیتوان این کار را انجام داد (در ساختارها فقط دادهها ذخیره میشوند).
- هدف استفاده: ساختارها معمولاً برای دادههای ساده و بدون نیاز به متدها استفاده میشوند، در حالی که کلاسها برای پیادهسازی ویژگیها و رفتارهای پیچیدهتر کاربرد دارند.
۴. وراثت در ++C
در ++C، کلاسها میتوانند از کلاسهای دیگر ارثبری کنند. این فرآیند وراثت نامیده میشود. با استفاده از وراثت، میتوانیم ویژگیها و رفتارهای یک کلاس را به کلاسهای دیگر منتقل کنیم.
مثال:
using namespace std;
class Animal {
public:
void speak() {
cout << "حیوان صدای خاص خود را دارد." << endl;
}
};
class Dog : public Animal { // کلاس Dog از کلاس Animal ارث میبرد
public:
void bark() {
cout << "سگ واق میزند." << endl;
}
};
int main() {
Dog dog;
dog.speak(); // استفاده از متد ارثی speak
dog.bark(); // استفاده از متد خاص کلاس Dog
return 0;
}
نتیجهگیری:
- ساختارها برای نگهداری دادهها و ترکیب انواع مختلف دادهها به کار میروند و سادهتر هستند.
- کلاسها به شما امکان میدهند که علاوه بر دادهها، توابعی را نیز برای انجام عملیاتهای مختلف بر روی دادهها اضافه کنید و کنترل بهتری بر روی دسترسی به اعضا داشته باشید.
- وراثت یکی از ویژگیهای مهم کلاسهاست که به شما این امکان را میدهد که ویژگیها و رفتارهای یک کلاس را به کلاسهای دیگر منتقل کنید.
