PDA

View Full Version : سوال: اشکال در ارث بری



h_motamed123
دوشنبه 18 آذر 1387, 21:11 عصر
سلام
من می خواستم بدونم چه اشکالی تو ارث بری این برنامه است
با تشکر

#include<iostream.h>
#include<conio.h>
class a{
int a,b;
public:
void set(int x,int y)
{
a=x;
b=y;
}
int geta()
{
return(a);
}
int getb()
{
return(b);
}
};
class b:public a{
public:
int s()
{
return(geta()*getb());
}
int p()
{
return(geta()+getb());
}
};
class c:public b,private a{
public:
int sum()
{
return(s()+p());
}
int ave()
{
return((s()+p())/2);
}
};
void main()
{
clrscr();
c t1;
cout<<t1.sum();
t1.set(7,8);
cout<<t1.p();
getch();
}

PHP000001
دوشنبه 18 آذر 1387, 23:04 عصر
مشکل در نحوه ارث بری است. وقتی کلاس b خصوصیات کلاس a رو به ارث میبره و کلاس c خصوصیات b رو ، دیگه لازم نیست کلاس c از a و b مشتق بشه. فقط از b مشتق بشه کافیه چون خود b هم از a مشتق شده. پس اگه خط تعریف کلاس c رو اینطور تغییر بدی فکر کنم برنامه درست شه:
class c:public b

h_motamed123
دوشنبه 25 آذر 1387, 12:05 عصر
متشکر از پیشنهاد خوبتون
اما من فهمیدم که کلاس والد میتونه ارث بری رو فقط به بعضی از اعضائ محدود کنه من این کار رو با protectedو friendship بلدم اما مثل اینکه راه حل بهتری هم داره.میشه من را راهنمایی کنید.
باتشکر

cups_of_java
دوشنبه 25 آذر 1387, 17:13 عصر
احتمالن منظورت انواع ارث بری هستش. تو سی پلاس پلاس، خود ارث بری می تونه بصورت public، private یا protected تعریف بشه که در هر کدوم، اعضایی که به ارث می رسند متفاوت هستند.



class b:private a

h_motamed123
چهارشنبه 27 آذر 1387, 10:48 صبح
ممنون از پیشنهادتون
فکر کنم منظورم رو اشتباه بیان کردم من انواع ارث بری رو بلدم اما می خواستم بدونم که میشه ارث بری رو محدود کرد بطوری که کلاس فرزند در publicپدر هم فقط بتونه به بعضی متد ها دسترسی داشته باشه؟
وبقیه اعضائ به کلاس های دیگر به ارث برسد و متد مشترکی در این ارث بری ها نباشه؟
باتشکر motamed

emad_67
چهارشنبه 27 آذر 1387, 10:57 صبح
ممنون از پیشنهادتون
فکر کنم منظورم رو اشتباه بیان کردم من انواع ارث بری رو بلدم اما می خواستم بدونم که میشه ارث بری رو محدود کرد بطوری که کلاس فرزند در publicپدر هم فقط بتونه به بعضی متد ها دسترسی داشته باشه؟
وبقیه اعضائ به کلاس های دیگر به ارث برسد و متد مشترکی در این ارث بری ها نباشه؟
باتشکر motamed
من که دقیقا متوجه نشدم چی کار میخوای بکنی. یه مثال از چیزی که میخوای بزن البته کوتاه، چون اون مثالی رو هم که در ابتدا گذاشتی مشخص نیست منظورت چیه؟

cups_of_java
چهارشنبه 27 آذر 1387, 21:31 عصر
ممنون از پیشنهادتون
فکر کنم منظورم رو اشتباه بیان کردم من انواع ارث بری رو بلدم اما می خواستم بدونم که میشه ارث بری رو محدود کرد بطوری که کلاس فرزند در publicپدر هم فقط بتونه به بعضی متد ها دسترسی داشته باشه؟
وبقیه اعضائ به کلاس های دیگر به ارث برسد و متد مشترکی در این ارث بری ها نباشه؟
باتشکر motamed


اول اینکه لطفن کمی سعی کنید جملاتتون رو با دقت بیشتری بنویسید که خوانا باشه.
دوم اینکه نه! نمی شه ارث بری رو محدود به فرزند کرد. یا همه فرزندان به ارث می برند یا نمی برند.

huni_1989
پنج شنبه 28 آذر 1387, 14:33 عصر
سلام
چیزی که شما میخواین اگه با ارث بری پیاده سازی بشه، مفهوم ارث بری زیر سوال میره. شما میتونید از friendship استفاده کنید. مثلا اگر تابع a فرند تابع b باشه، و کلاس c از b به ارث ببره، فقط از عضو هایی از کلاس a که فرند کلاس b محسوب میشن ارث بری می کنه. امیدوارم اشتباه راهنمایی نکرده باشم. فکر می کنم به احتمال 90% اینطور باشه. دقیقا مطمئن نیستم.
اگه اشتباه بود ببخشید.

h_motamed123
دوشنبه 02 دی 1387, 09:42 صبح
باتشکر از پیشنهادادتون
من میدونستم که میشه فقط قسمتی از part پدر را به فرزند داد و فرزند فقط به قسمتی از public یا private پدر دسترسی داشته باشد من میخواستم برای پیاده سازی این نوع کد من را راهنمایی کنید.
باتشکر motamed