PDA

View Full Version : مبتدی: مقدار دهی به آرایه ی پویا



helia999
شنبه 30 اردیبهشت 1391, 02:23 صبح
سلام دوستان
من با استفاده از وراثت و چند ریختی در سی پلاس پلاس یک کلاس شئ (Shape) نوشتم که تابع محاسبه و نمایش مساحت را برای دو نوع شئ مثلث و مستطیل (Rectangle-Triangle) فراخوانی و اجرا می کند.
توی تابع سازنده برای این اشیا مقدار دهی اولیه انجام دادم ولی در قسمت کلاینت یک آرایه از اشاره گر به اشیایی از نوع کلاس Shape ایجاد کردم و تخصیص فضا هم به صورت داینامیک انجام دادم. تا این جا برنامه مشکلی نداره و اجرا می شه.
سوال من این جا هست که چه جوری می تونم غیر از مقدار دهی اولیه در تابع سازنده، باز هم مقادیری از طول و عرض را برای محاسبه ی مساحت در آرایه قرار بدهم؟
آیا توی کلاینت باید تعریف کنم یا توی کلاس پایه یا کلاس مشتق شده؟ و اگر بخوام این مقادیر را از کاربر بگیرم و در آرایه ذخیره کنم(که هدف اصلی هم از پویا تعریف کردن آرایه همین بود که از کاربر مقادیری دریافت بشه) اونوقت باید چیکار کنم؟
من کدهها رو اینجا قرار می دهم.87218
ممنون می شم راهنماییم کنید:لبخندساده:

Ananas
شنبه 30 اردیبهشت 1391, 14:54 عصر
سلام.
میتونی از struct برای ذخیره کردن طول و عرض استفاده کنی که هم بیرون کلاس و هم داخل کلاس shape بتونی ازش استفاده کنی، آرایه ای از اونها بسازی و یا به عنوان ورودی به تابعی بفرستی.
مثالا shape.h رو اینطوری تغییر بده :

#ifndef SHAPE_H
#define SHAPE_H

typedef struct TWidthLength {
public:
double Width;
double Length;
} *PWidthLength;

class Shape{

public:
Shape( double = 1.0, double = 1.0 );
virtual void setWidth(double w);
virtual void setLength(double l );
virtual double getWidth();
virtual double getLength();
virtual double getArea() = 0;
virtual void printArea() = 0;
private:
TWidthLength wl;
//double length;
//double width;
};

#endif

helia999
شنبه 30 اردیبهشت 1391, 16:08 عصر
مرسی آناناس جون:بوس:
ولی زیاد با struct میونه ی خوبی ندارم!:لبخند: به نظرم توی پیاده سازیش به مشکل بخورم:خجالت:
به نظرت چه طوره توی همون کلاینت یه حلقه for بذارم که از کاربر مقادیری رو به عنوان ورودی بگیره؟:متفکر:
البته هنوز امتحانش نکردم ، فکر می کنی اینطوری درست هست؟ یا لازم هست که توی پیاده سازی هر کلاس با توابع set & get این کارو انجام بدم؟
ممنون که کمکم می کنی:لبخندساده:

Ananas
شنبه 30 اردیبهشت 1391, 16:28 عصر
مرسی آناناس جون:بوس:
قربوقت.

ولی زیاد با struct میونه ی خوبی ندارم!:لبخند: به نظرم توی پیاده سازیش به مشکل بخورم:خجالت:
چرا؟ چیز خوبیه. برای تعریفش مثل کلاس باید عمل کنی. struct خیلی خوبه سعی کن وقتایی که میخوای مجموعه اطلات رو کنار کم داشته باشی از struct استفاده کنی. مثل بردارها و یا هر چیزی مثل مثال خودت. برای انجام عملیات و یا توابع از کلاس استفاده کن و هر وقت خواستی فقط اطلاعات کنار هم مجموعه کنی از struct استفاده کن. حتی میتونی تابع GetSize و یا SetSize رو توی struct تعریف کنی.

به نظرت چه طوره توی همون کلاینت یه حلقه for بذارم که از کاربر مقادیری رو به عنوان ورودی بگیره؟:متفکر:
تابع Get و Set کلاس رو با cin و cout ننویس و cin و cout رو تو همون client بنویس ولی همون طور که گفتم میتونی تابع GetSize و SetSize رو تو همون Struct تعریف کنی و طول و عرض رو به عنوان دو تا پارامتر به تابع ارسال کنی.
مثلا همچین چیزی :

shape *s;
s = new Triangle(0, 0);
double w, l;
cout << "Enter a Width : ";
cin >> w;
cout << "Enter a Length : ";
cin >> l;
s->wl.SetSize(w, l);