PDA

View Full Version : سوال: مشکل در نوشتن یک برنامه که در آن از ارث بری استفاده میشه



mth_sh89
جمعه 20 اردیبهشت 1387, 00:44 صبح
با سلام وخسته نباشید خدمت همه ی برنامه نویسان حرفه ای که البته بعضیاشون ما تازه کار ها رو تحویل نمیگیرن:ناراحت:

من می خوام یه برنامه بنویسم(در واقع تا حدی از برنامه رو نوشتم)که دارای چند کلاس مجزا باشه. یک کلاس به اسم Point که در واقع کلاس پدر بزرگه و یک کلاس به اسم مستطیل(که اسم انگلیسیش رو نمیدونم ممنون میشم اگه کسی بهم بگه)که فرزند point هست و یک کلاس به اسم مکعب مستطیل(که این رو هم اسم انگلیسیش رو نمیدونم ممنون میشم اگه کسی بهم بگه)که فرزند مستطیله. Point باید از خودش دو تا متغیره x ,y رو داشته باشه وکلاس مستطیل علاوه بر اینکه از Point ارث میبره از خودش یه طول و عرض داشته باشه(که من فکر میکنم توی کلاس مستطیل باید دو متغیر جدید معرفی بشه(با دومتغیره قبلی میشه 4تا) و x,y با کلمه ی کلیدی base فراخوانی بشن که اینجا (موقع فراخونی)از کد من ایراد میگیره)و مکعب مستطیل علاوه بر ارث بردن طول و عرض باید ارتفاع رو از خودش داشته باشه.بعد باید یه برنامه ی مشتری بنویسم که از این سه کلاس استفاده کنه و اشیاء مختلف داشته باشه و در اون باید یک شئ Point ایجاد کنیم که از سازنده ی پیشفرض Point استفاده کنه و یک بار شئ Point ایجاد کنیم که از سازنده سربار گذاری شده ی Point استفاده کنه که 2تا ارگومان بگیره.3 تا شی برای مستطیل ایجاد کنید:
1.از سازنده ی پیشفرض پدر و فرزند استفاده شود.
2.از سازنده ی پیش فرض فرزند وسر بار گذاری شده پدر استفاده شود.
3.هر دو سربار گذاری شده باشند
مقدارx,y پوینت رو باید تغییر بدهیم و بعد چاپش کنیم.و Diameter رو از قضیه ی فیثا غورث ومحیط( circumference) و Area رو باید حساب کنیم.
یک شی سازنده سر بار گذاری شده (که البته مطمئن نیستم همچین عبارتی درست باشه) مکعب مستطیل وپدر و پدر بزرگش رو ایجاد فراخوانی کند و در زمان ایجاد فراخوانی کند و بعد از ان مقادیرش را تغییر دهید (طول و عرض و ارتفاع) و با to string چاپش کنید.
diameter (قطر) و circumference (محیط) مستطیل و Area (مساحت) و volume (حجم) مکعب رو حساب کنید .

اگر کسی این لطف رو کنه که برنامه رو بنویسه که من مدیونشم ولی این رو هم بگم نوشتن برنامه ی بالا برای کسی که خیلی وقته سی شارپ رو خونده خیلی مسخره به نظر میاد ولی برای تازه کاری مثل من که 5 تا برنامه ی سی شارپ ننوشته یه کم گیر داره:گریه:

Alireza_Salehi
جمعه 20 اردیبهشت 1387, 07:47 صبح
اگر کسی این لطف رو کنه که برنامه رو بنویسه که من مدیونشم ولی این رو هم بگم نوشتن برنامه ی بالا برای کسی که خیلی وقته سی شارپ رو خونده خیلی مسخره به نظر میاد ولی برای تازه کاری مثل من که 5 تا برنامه ی سی شارپ ننوشته یه کم گیر داره:گریه:
بگو کجاش گیر داره تا همون جاش رو راهنمایی کنیم؟

اَرژنگ
جمعه 20 اردیبهشت 1387, 10:52 صبح
مستطیل(که اسم انگلیسیش رو نمیدونم ممنون میشم اگه کسی بهم بگه)

Rectangle



که فرزند point هست و یک کلاس به اسم مکعب مستطیل(که این رو هم اسم انگلیسیش رو
نمیدونم ممنون میشم اگه کسی بهم بگه)

Rectangular Cube

hdv212
جمعه 20 اردیبهشت 1387, 11:35 صبح
باشه(که من فکر میکنم توی کلاس مستطیل باید دو متغیر جدید معرفی بشه(با دومتغیره قبلی میشه 4تا) و x,y با کلمه ی کلیدی base فراخوانی بشن که اینجا (موقع فراخونی)از کد من ایراد میگیره)
دوست عزیز لطفا خطای مورد نظر رو اینجا بنویس، احتمالا میخوای به اعضای Private کلاس Point دسترسی داشته باشی، خب این نمیشه، در کلاسهای فرزند فقط میتونی به اعضای Public و Protected و یا Internal دسترسی داشته باشی.

mth_sh89
جمعه 20 اردیبهشت 1387, 12:20 عصر
(که من فکر میکنم توی کلاس مستطیل باید دو متغیر جدید معرفی بشه(با دومتغیره قبلی میشه 4تا) و x,y با کلمه ی کلیدی base فراخوانی بشن که اینجا (موقع فراخونی)از کد من ایراد میگیره)
به جایی که نوشتم فکر می کنم یا نوشتم مطمئن نیستم پاسخ بدهید تا بقیه ی مشکلام رو هم بگم:افسرده:

mth_sh89
جمعه 20 اردیبهشت 1387, 12:25 عصر
یک شی سازنده سر بار گذاری شده (که البته مطمئن نیستم همچین عبارتی درست باشه)


مگر با base: نمیشه به اعضای private دسترسی پیدا کرد:متفکر:؟؟؟؟

hdv212
جمعه 20 اردیبهشت 1387, 13:59 عصر
مگر با base: نمیشه به اعضای private دسترسی پیدا کرد؟؟؟؟
خیر، فقط از طریق اعضای خود اون کلاس قابل دسترسی هست، شما میتونی از Protected استفاده کنی.

mth_sh89
جمعه 20 اردیبهشت 1387, 15:51 عصر
خیر، فقط از طریق اعضای خود اون کلاس قابل دسترسی هست، شما میتونی از Protected استفاده کنی

استاد ما بهمون گفت توی برنامه فرزند با اینکه اعضای کلاس پدر private هستن میشه باbase: اونا رو فراخونی کرد.منم بار اول private معرفی کردم خطا گرفت بعد به جاشو با protected عوض کردم درست شد ولی دوباره protected رو پاک کردم و به جاش private نوشتم و هیچ خطایی نگرفت :گیج::گیج::گیج:
این مطلب رو طبق کتاب how to programming c#.net که مهندس رامین مولانا پور ترجمه کرده ،به ما گفت و شدنیه:لبخند:(قدرت خدا رو ببین):لبخند:

mth_sh89
جمعه 20 اردیبهشت 1387, 16:05 عصر
من الان بدون اینکه مشکلی پیش بیاد سه تا کلاسBox ,Point,Recatangle رو نوشتم متد ها ی مورد نظر رو براش تعریف کردم
فقط مونده یه کلاس مشتری بنویسم که می نویسم
حالا میخوام توی سه تا tab ای که روی فرمم ایجاد کردم یه سری مقادیر رو چاپ کنم باید چی کار کنم که توی تب اطلاعات رو چاپ کنم.مثلا اگه بخوام توی tab اولی مقدار x,y رو نشون بدم باید کد های point رو توی بلاک tab اولی کپی کنم؟؟

mth_sh89
جمعه 20 اردیبهشت 1387, 20:36 عصر
این error رو هم میده:عصبانی++:

Error 1 Inconsistent accessibility: base class 'WindowsApplication1.Point' is less accessible than class 'WindowsApplication1.Form1' C:\Documents and Settings\Mohammad Taher\My Documents\Visual Studio 2005\Projects\WindowsApplication1\WindowsApplicati on1\Form1.Designer.cs 3 19 WindowsApplication1

mth_sh89
شنبه 21 اردیبهشت 1387, 20:09 عصر
چرا هیچ کس جواب نمیده؟؟:عصبانی++::عصبانی++:

hdv212
شنبه 21 اردیبهشت 1387, 20:14 عصر
خب دوست عزیز، همانطور که توی متن خطا میبینی، میگه که شما کمترین سطح دسترسی رو برای عضو مورد نظر فراهم کردی، که احتمالا همون Private هست، سعی کن در کلاس base از دسترسی protected استفاده کنی نه private.

mth_sh89
شنبه 21 اردیبهشت 1387, 20:23 عصر
تغییر دادم ولی درست نشد . جواب اولین سوال صفحه ی 1 برام مهممتره.اگه سوالش واضح نیست بگید بیشتر توضیح میدم

mth_sh89
شنبه 21 اردیبهشت 1387, 20:31 عصر
این مشکل احتمالا از فرم باید باشه که احتمالا با پاک کردن پروژه وایجاد پروژه ی وکپی کردن کد کلاس ها درست میشه فقط من نمیدونم چطوری میتونم بعد از ایجاد tab با خصوصیت toolbox ،tab control اطلاعات یک کلاس رو در تبی که ایجاد کردم چاپ کنم؟؟؟؟؟؟:افسرده:

hdv212
شنبه 21 اردیبهشت 1387, 20:46 عصر
1.از سازنده ی پیشفرض پدر و فرزند استفاده شود.
اگه منظورت اینه، خب ببین فرض کن در کلاس پدر یا همون base class یک سازنده داری که اصلا پارامتر نمیگیره، حالا در کلاس فرزند هم میخوای یه سازنده بسازی که اصلا پارامتر نداره، با توجه به اینکه کلاس فرزند تمام خصوصیات و رفتارهای کلاس پدر رو به ارث میبره، در زمان نوشتن سازنده ی کلاس فرزند، اینطوری باید بنویسی :

public DerivedClass() : base()
{

}
اینطوری میتونی از سازنده ی پیش فرض کلاس پدر استفاده کنی، دقیقا مثل زمانی که میخوای کلاسی رو از کلاس دیگه ارث بری کنی.

mth_sh89
شنبه 21 اردیبهشت 1387, 21:03 عصر
نه اینو با اینکه چیزی از سی شارپ نمیدونم میدونم . ببین من یه برنامه ی windows application ایجاد کردم و باید روی فرمم tab ایجاد کنم و وقتی تب ایجاد کردم اطلاعات هر سه تا کلاس رو توی 3تا tab چاپ کنم .باید چیکار کنم ؟؟.
مثلا وقتی یه lableوbutton ایجاد می کنیم روی فرم و می خوایم هر وقت روی button کلیک کردیم یه عبارت روی فرم در جایی که lable ایجاد شده چاپ بشه می ریم روی button کلیک میکنیم و کد مربوطه رو مینویسیم و وقتی برنامه رو اجرا کردیم به محض اینکه روی button کلیک کنیم در قسمت lable عبارت مورد نظرمون چاپ میشه.

حالا من می خوام اطلاعات دلخواه خودمو توی تبی که روی فرمم ایجاد کردم ببینم باید چیکار کنم؟؟؟

hdv212
شنبه 21 اردیبهشت 1387, 21:36 عصر
متوجه منظورت نشدم، یعنی از tab استفاده کردی، حالا مثلا میخوای با زدن یک دکمه، label ای که در tab1 هست، مقدارش عوض بشه، درسته ؟
خب کاری نداره، میتونی از this استفاده کنی، مثل این : this.label1.Text، ربطی به tab نداره، شما میتونی به هر کنترلی و در هر tabای به همین صورت دسترسی داشته باشی، سوالت خیلی گنگه و اینهایی که میخوای ربطی به ارث بری نداره!

mth_sh89
یک شنبه 22 اردیبهشت 1387, 04:12 صبح
درسته این سوال ربطی به ارث بری نداره ولی چون در تکمیل برنامه ی ارث بریه اینجا مطرحش کردم.
ولی هنوز متوجه منظورم نشدید.
من نمی خوام labal ایجاد کنم اون یه مثال بود.

من می خوام سه تا tab به اسم های tab1 ،tab2,tab3 روی فرمم ایجاد کنم و می خوام x,y رو که توی کلاس Point ایجاد کردم توی tab1 ،مساحت و قطر ومحیط مستیل رو توی tab2 ،مساحت و حجم مکعب رو توی tab3 چاپ کنم.یعنی اطلاعات 3تا کلاسی(Point,Retangale,RetangulerCube) که توی برنامم ایجاد کردم رو می خوام توی یک فرم جداگانه چاپ کنم.ok??????

یه مثال از توی کامپیوتر واست میزنم برو روی my computer کلیک راست کن و گزینه ی اخر رو بزن.پنجره ای که واست نمایش داده میشه یه tab به اسم General یه تب به اسم computer name یه تب به اسم,........داره که هرکدومش یه اطلاعات رو نشون میده.حالا منم می خوام مثل tab جنرال کامپیوتر که System:Microsoft Windows Xp رو چاپ کرده ، x.y رو توی tab1 چاپ کنم چیکار کنم؟؟؟؟

hdv212
یک شنبه 22 اردیبهشت 1387, 14:51 عصر
نمیدونم سوالت چی هست، این پروژه رو برات گذاشتم که هم سه تا کلاسی که گفتی رو نمونه سازی کردم و هم داخل tab ای که میگی نشون میدم، ببین همینه :

mth_sh89
پنج شنبه 26 اردیبهشت 1387, 23:27 عصر
یه جوری خودم جمع و جورش کردم.ممنون