با سلام
اگر ما کلاسی داشته باشیم که احتیاج به هیچ تابعی نداشته باشد آیا میتوان از یک Struct به جای آن استفاده کرد ؟ بعبارت دیگر آیا کلاسها مزیتی نسبت به Struct دارند یا شکل توسعه یافته ی Struct هستند ؟
با سلام
اگر ما کلاسی داشته باشیم که احتیاج به هیچ تابعی نداشته باشد آیا میتوان از یک Struct به جای آن استفاده کرد ؟ بعبارت دیگر آیا کلاسها مزیتی نسبت به Struct دارند یا شکل توسعه یافته ی Struct هستند ؟
با تشکر از توضیح شما ...
من از این نوشته این نتیجه را میگیرم که تفاوتی ( البته در حالتی که مطرح کرده ام ) با هم ندارند ... درسته ؟
سلامنوشته شده توسط www2006
زیباتره که از کلاس استفاده کنید. ضمناً شی گرائی فقط محدود به توابع داخل کلاس نمیشه. ارث بری و مخفی سازی رو از دست میدین اگر از کلاس استفاده نکنید.
شبیر
به این نکتش اصلا توجه نکرده بودم ... ممنوننوشته شده توسط shobair
سلام. علاوه بر Inheritance و Polymorphism باید این نکته رو هم در نظر داشت که کلاسها Reference Type هستند و Structure ها Value Type .
میشه بیشتر توضیح بدید ..؟نوشته شده توسط Pouria.NET
کلاس با struct خیلی فرق داره در حال حاضر از مهمترین چیزهایی که تو علم کامپیوتر وجود داره security یا امنیت که تو کلاس رعایت میشه همچنین بحث ورثه که خیلی مهمه که اینا شی گرایی رو تشکیل میده همچنین آقای puria.net تو struct ها referenece نیز وجود داره و این فرق اونا نیست و همچنین فرق class , structure وجود متد تو کلاسه و به نظر من باید به جای structure از کلاس استفاده کرد
شاید تو زبان ها دیگه کلاس و استراک باهم فرق داشته باشن ولی توی سی++ تنها فرقشون اینکه ادسترسی پیش فرض برای کلاس private و برای استراک public هست و این هم به خاطر سازگاری باسی به وجود اومده و گرنه هیچ تفاوتی با هم ندارن شما می تونید یه کلاس رو از یه استراکت مشتقی کنی برای یه استرکت چند ریخیتی رو پیدا سازی کنی کلا هر کاری بشه با یکی کرد با اون یکی هم می شه
دوست عزیز حرف شما درسته کلا فرق شی گرایی به private بودنشه و این فرق کوچیکی نیست و خیلی اساسیه و همچنین وراثت رو تو شی گرایی میتونیم ببینیمنوشته شده توسط Arash_j13
سلام
دوست عزیز حرف شما درسته کلا فرق شی گرایی به private بودنشه و این فرق کوچیکی نیست و خیلی اساسیه و همچنین وراثت رو تو شی گرایی میتونیم ببینیمبصورت پیشفرض , نه از روی اجبار ! خیلی راحت مثله یک کلاس میتوان یک داده و یا تابع عضو را بصورت خصوصی در یک ساختار تعریف کرد.تنها یک تفاوت دستوری بین کلاسها و ساختار ها وجود دارد , بنا به قرارداد اعضای یک ساختار بصورت پیشفرض عمومی هستند , حال آنکه اعضای یک کلاس خصوصی هستند.
دوباره تمام پستهای بالا رو بخون , بعد پست بعدی ات رو بده .
خیلی هم فرق بزرگی نیست شما حتما نیاد از سطح دسترسی پیش فرض استفاده کنید خیلی راحت می تونید سطح دسترسی رو در ساختار private تعریف کیند بدون هیچ مشکلینوشته شده توسط Armanprogrammer
اگه قرار باشه توی یه شیء فقط از داده استفاده بشه دیگه مخفی بودن چه معنایی میده؟
یه کم فکر کنید بعدش پست بدید
مرسی...
چرا معنا می ده فرض کنید مخواید یه ابجکت برای ساعت بسازید که سه تا فیلد ساعت دقیقه و ثانیه داره و هیچ کار دیگه ای هم نمی خواد انجام بده
اما این فیلدها هر مقداری رو نمی تونه نگه داری کنه مثلا ساعت 100 یا دقیقه 800 بی معنیه پس باید داده ها رو از دسترس عموم خارج کرد و به کمک متد ها واسط در دسترس قرار داد که مقدار رو کنترل کنند
اصولا اگه طراحی ابجکت درست انجام بشه خیلی کم پیش می یاد که یه عضو داده ای به صورت عمومی طراحی بشه
سلام
خوبید؟
اصلا خبر دارید موضوع تاپیک چیه؟
خداحافظ
سلام
فکر کنم شما بی خبر بودید
اگه قرار باشه توی یه شیء فقط از داده استفاده بشه دیگه مخفی بودن چه معنایی میده؟
یه کم فکر کنید بعدش پست بدید
مرسی...
سلام،
متن زیر بخش مربوط به توضیح رابطه class و struct از کتاب The C++ Programming Language نوشته Bjarne Stroustrup است:
10.2.8 Structures and Classes [class.struct]
By definition, a struct is a class in which members are by default public; that is,
struct s {...is simply shorthand for
class s { public : ...The access specifier private : can be used to say that the members following are private, just as
public : says that the members following are public. Except for the different names, the following
declarations are equivalent:
class Date1 {Which style you use depends on circumstances and taste. I usually prefer to use struct for classes
int d ,m , y ;
public :
Date1 (int dd , int mm , int yy);
void add_year (int n ); // add n years
};
struct Date2 {
private:
int d ,m , y ;
public:
Date2 (int dd , int mm , int yy );
void add_year (int n ); // add n years
};
that have all data public. I think of such classes as ‘‘not quite proper types, just data structures.’’
Constructors and access functions can be quite useful even for such structures, but as a shorthand
rather than guarantors of properties of the type (invariants, see §24.3.7.1).
It is not a requirement to declare data first in a class. In fact, it often makes sense to place data
members last to emphasize the functions providing the public user interface. For example:
In real code, where both the public interface and the implementation details typically are moreclass Date3 {
public:
Date3 (int dd , int mm , int yy );
Section 10.2.8 Structures and Classes 235
void add_year (int n ); // add n years
private :
int d ,m , y ;
};
extensive than in tutorial examples, I usually prefer the style used for Date3 .
Access specifiers can be used many times in a single class declaration. For example:
class Date4 {
public :
Date4 (int dd , int mm , int yy );
private :
int d ,m , y ;
public:
void add_year (int n ); // add n years
};
Having more than one public section, as in Date4 , tends to be messy. So does having more than
one private section. However, allowing many access specifiers in a class is useful for machinegenerated
code.
آقای محترم حرف شما در مورد یک کلاس درسته ولی شما وراثت و نادیده گرفتین شاید داده ای داشته باشیم که بخوایم فقط برای child ها استفاده بشهنوشته شده توسط oVERfLOW
سلام دوستان !
من تمام این تاپیک رو خوندم اما . . .
هنوز هم درست نفهمیدم که چرا با وجود struct از class استفاده میشه ؟!؟!؟
آخه اینها که همشون یکی هستند ( فقط پیش فرض ساختار public و پیش فرض کلاس private )
غیر از اینه ؟!؟!؟!؟!
کسی نبود کمک من کنه ؟!؟!؟!؟
یه بار دیگه سوال رو بپرس تا جواب بدیم از اول نمی شه خوند
Kernel Mode Developer
RootKitSMM@Yahoo.com
همون سوال منو میخوندی دیگه :
هنوز هم درست نفهمیدم که چرا با وجود struct از class استفاده میشه ؟!؟!؟
آخه اینها که همشون یکی هستند ( فقط پیش فرض ساختار public و پیش فرض کلاس private )
غیر از اینه ؟!؟!؟!؟!
باید خدمتتون عرض بشه که Struct یک حالت خیلی خلاصه شده از Class هست در حالیکه یک Class امکانایی بسی بیشتر از Struct دارد .
یک ساختار در واقع بیشتر برای این تعریف میشود که مثلا یک نوع داده ای دلخواه مثلا نوع داده ای دانشجو ( که متشکل از یکسری نوع های داده ای
از جمله : آرایه جهت نگهداری اسم ، متغیر جهت نگهداری معدل و ...) تعریف بشود . حال آنکه یک Class مفهومی بالاتر از این را دارد :
- تمامی اصول و روابط شی گرایی برای کلاسها طراحی شده اند از جمله : Polymorphism , Inheritance , Operator Overloading , ...
- یک Struct بیشتر شبیه یک نوع داده ای است که متشکل از یکسری نوع های داده ای دیگر است ولی یک Class در بردارنده Object ای است با کلی ویژگی
- و ...
پیشنهاد میکنم حتما به کتاب مراجعه کرده تا به تفصیل متوجه این تفاوت بشوید ، هرچند که این موضوع چندبار هم در تالار بحث شده است .
موفق باشید ./
آخه خب ارث بری هم که روش کار میکنه ! داخلش میشه متد ( تابع ) هم تعریف کرد !
پس فرقش با class چیه ؟!
واقعا نمیفهمم !
شما که جواب نمیدین ب؟ لااقل این رو بگین :
آیا میشه از یک struct مشتق گرفت ؟