وراثت (Inheritance)
آشنایی با وراثت در C++ و نحوه ایجاد کلاسهای مشتق
وراثت (Inheritance)
وراثت یکی از مفاهیم کلیدی OOP است که به کلاسها اجازه میدهد ویژگیها و رفتارهای کلاسهای دیگر را به ارث ببرند.
ساختار وراثت
class ChildClass : accessSpecifier ParentClass {
// اعضای کلاس فرزند
};
مثال پایه
// کلاس پایه
class Animal {
public:
void eat() {
cout << "حیوان در حال خوردن است" << endl;
}
void sleep() {
cout << "حیوان در حال خواب است" << endl;
}
};
// کلاس مشتق
class Dog : public Animal {
public:
void bark() {
cout << "سگ در حال پارس کردن است" << endl;
}
};
int main() {
Dog myDog;
myDog.eat(); // از کلاس پایه
myDog.sleep(); // از کلاس پایه
myDog.bark(); // از کلاس مشتق
return 0;
}
انواع وراثت
| نوع | توضیح |
|---|---|
| Single | یک کلاس پایه |
| Multiple | چندین کلاس پایه |
| Multilevel | زنجیرهای |
| Hierarchical | یک کلاس پایه، چندین فرزند |
وراثت چندگانه (Multiple Inheritance)
class A {
public:
void methodA() { cout << "Method A" << endl; }
};
class B {
public:
void methodB() { cout << "Method B" << endl; }
};
class C : public A, public B {
public:
void methodC() { cout << "Method C" << endl; }
};
int main() {
C obj;
obj.methodA();
obj.methodB();
obj.methodC();
return 0;
}
وراثت چندسطحی (Multilevel Inheritance)
class Animal {
public:
void eat() { cout << "خوردن" << endl; }
};
class Mammal : public Animal {
public:
void breathe() { cout << "نفس کشیدن" << endl; }
};
class Dog : public Mammal {
public:
void bark() { cout << "پارس کردن" << endl; }
};
int main() {
Dog myDog;
myDog.eat(); // از Animal
myDog.breathe(); // از Mammal
myDog.bark(); // از Dog
return 0;
}
سازندهها در وراثت
class Parent {
public:
Parent() {
cout << "سازنده Parent" << endl;
}
};
class Child : public Parent {
public:
Child() : Parent() {
cout << "سازنده Child" << endl;
}
};
دسترسی به اعضای محافظت شده
class Parent {
protected:
int protectedValue;
public:
Parent() : protectedValue(100) {}
};
class Child : public Parent {
public:
void display() {
cout << protectedValue; // قابل دسترسی
}
};
بهترین شیوهها
- از وراثت برای رابطه "is-a" استفاده کنید
- از ترکیب (Composition) برای رابطه "has-a" استفاده کنید
- مراقب وراثت چندگانه باشید (مشکل Diamond)
- از virtual برای جلوگیری از تکرار استفاده کنید
نکات مهم
- کلاس فرزند همه اعضای public کلاس پایه را به ارث میبرد
- اعضای private قابل دسترسی نیستند
- اعضای protected در کلاس فرزند قابل دسترسی هستند
- میتوانید متدهای کلاس پایه را override کنید
این مبحث بخشی از دوره آموزش کامل C++ است.