صفحه نخست

پلی‌مورفیسم در ++C

پلی‌مورفیسم در ++C به وسیله‌ی یک کلاس اصلی که یک pure virtual function دارد و زیر کلاس‌های ایجاد شده از آن کلاس پیاده‌سازی می‌شود.

همان‌طور که می‌دانیم کلاسی که حداقل یک pure virtal function دارد کلاس ابسترکت است و هیچ آبجکتی از آن ساخته نمی‌شود. برای تعریف آبجکت باید از آن کلاس، زیر کلاس بسازیم و متدهای pure virtual را پیاده‌سازی کنیم.

گام دوم برای پلی‌مورفیسم ایجاد یک اشاره‌گر از نوع کلاس اصلی است که به آبجکتی از نوع کلاس مشتق شده اشاره می‌کند.

آن قدرها هم سخت نیست! کد زیر را ملاحظه بفرمایید.

کد زیر یک کلاس اصلی به نام Animal دارد و حاوی یک pure virtal function به نام speak است. پس animal یک کلاس ابسترکت است و نمی‌توان از آن آبجکت ساخت. حال سه زیر کلاس Duck و Dog و Cat را تعریف میکنیم. هر سه زیر کلاس متد speak را به شیوه‌ی متفاوت و پیاده سازی می‌کنند.

در تابع main یک وکتور که عناصری از نوع اشاره‌گر به کلاس Animal می‌گیرد تعریف می‌کنیم و در آن، آدرس آبجکت‌هایی از نوع کلاس‌های Cat و Dog و Duck می‌ریزیم.

برنامه را اجرا کنید و نتیجه را ببینید!

C++
#include <iostream>
#include <cstring>
#include <vector>
using namespace std;
 
class Animal {
	char name[50];
public:
	Animal(const char *animal_name) {
		strcpy(name, animal_name);
	}
	char *getName() {
		return name;
	}
 
	virtual void speak() = 0; // Pure virtal function
};
 
class Duck : public Animal {
public:
	Duck(const char *animal_name) : Animal(animal_name) { }
	void speak() {
		cout << getName() << " Quack." << endl;
	}
};
 
class Cat : public Animal {
public:
	Cat(const char *animal_name): Animal(animal_name) {} 
	void speak() {
		cout << getName() << " Meow." << endl;
	}
};
 
class Dog: public Animal {
public:
	Dog(const char *animal_name): Animal(animal_name) { }
	void speak() {
		cout << getName() << " Woof." << endl;
	}
};
 
int main() {
	vector<Animal *> animals;
	animals.push_back(new Duck("Duck1"));
	animals.push_back(new Cat("Cat1"));
	animals.push_back(new Dog("White Dog"));
	animals.push_back(new Duck("Duck2"));
 
	for (int i = 0; i < animals.size(); i++) {
		animals[i]->speak();
	}
 
	return 0;
}

نظر شما



 
 
 

 

کلیه حقوق برای دارنده‌ی سایت محفوظ است.