فراخوانی متدهای کلاس والد از کلاس فرزند - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

فراخوانی متدهای کلاس والد از کلاس فرزند

+2 امتیاز
آیا راهی وجود داره که بتونیم بدون نوشتن اسم کلاس والد به متدهاش دسترسی داشته باشیم؟
سوال شده مهر 18, 1393  بوسیله ی Mad (امتیاز 245)   10 35 47

2 پاسخ

+4 امتیاز
 
بهترین پاسخ

همچین چیزی توی استاندار وجود نداره ولی vs ماکروی برای اینکار به نام __super در نظر گرفته.

در ضمن خودتون هم می تونید با typedef همچین چیزی را توی کلاستون به صورت زیر تعریف کنید.

typedef Base super;

ویرایش:

به مثال زیر توجه کنید:


class Eye{
public:
	void view(){
		cout << "view" << endl;
	}
};
class Mouth{
public:
	void chew(){
		cout << "chew" << endl;
	}
};
class Head :public Eye, Mouth{
public:
	void eat(){
		__super::view();
		__super::chew();
	}
};
int _tmain(int argc, _TCHAR* argv[])
{
	Head a;
	a.eat();
       return 0;
}

کلاس Head از 2 کلاس دهان و چشم مشتق شده پس با فراخوانی متد eat ابتدا عملیات دیدن و سپس جویدن صورت می گیره.بدون استفاده از نام کلاس های والد

پاسخ داده شده مهر 19, 1393 بوسیله ی مصطفی ساتکی (امتیاز 21,998)   24 34 75
انتخاب شد مهر 19, 1393 بوسیله ی Mad
سلام. میشه نمونه برنامه ای بگذارین
این روش شما برای من تازکی داشت و جالب بود. اما در این برنامه شما زمانی که می خواین از متدهای کلاس های mouth و eye استفاده کنین در کلاس head از این کلاس ها ارث بری رو انجام می دیدن و اسم کلاس ها رو می نوسین. یعنی در هر صورتی اگر بخوایم از متدهای یک کلاس استفاده بکنیم بایستی به نحوی اسم کلاس مورد نظر در جایی از برنامه فراخوانی شده باشه تا بشه به متدهای اون کلاس دسترسی داشت.
+1 امتیاز

سلام. نه وجود نداره. چون متد در کلاس عضوی از کلاس است شما باید اول یک شی از اون کلاس بسازی و توسط اون شی به متدهای کلاس دسترسی داشته باشی یا اینکه اگر متد از نوع static بود می تونی با نوشتن اسم کلاس و بعد اسم متد به اون متد دسترسی داشته باشی.

#include <iostream>
using namespace std;
class Test
{
	public:
		static void print()
		{
			cout << "print function\n";
		}
		void chap()
		{
			cout << "chap function\n";
		}
};

int main()
{
	Test t;
	t.chap();
	Test::print();
	cin.get();
}

 

پاسخ داده شده مهر 18, 1393 بوسیله ی Pashmak (امتیاز 644)   8 15 31
...