PDA

View Full Version : سوال: پشته ای از اشیاء مختلف



zoz_zozm
یک شنبه 03 آبان 1388, 12:44 عصر
من می خوام پشته ای بنویسم که بشه توی اون اشیاء مختلفی رو قرار داد
مثلا یه عدد و یه رشته که با توجه به نوعش اونو تو پشته قرار بده یا خارجش کنه.
لطفا راهنماییم کنید!:عصبانی++:

tdkhakpur
یک شنبه 03 آبان 1388, 18:17 عصر
خوب بهترين را استفاده از ساختار با فرمت زير هست


typedef struct StackStruct
{
char value[512];
int lenght;
}cStack ;

ساختار فوق را در نظر بگيريد شما هرنوع داده اي را ميتوانيد در اين ساختار قيد كنيد


cStack cstk;
char *str={"this is a test"};
cstk.lenght = strlen(str);
memcpy(cstk.value, str, cstk.lenght);
حالا ميتوانيد اين ساختار را در يك بافر ديگر ذخيره كنيد و يا مثال زير
cStack cstk;
int k;
k = 200;
cstk.lenght = sizeof(int);
memcpy(cstk.value, &k, cstk.lenght);

قرار دادن ساختار فوق و بازيابي آنها فكر نكنم سخت باشد فقط بايد جايي را براي ذخيره انتخاب كنيد بافز يا ديسك...

Salar Ashgi
سه شنبه 05 آبان 1388, 11:56 صبح
در زبان سی شارپ مفهومی بنام Arraylist وجود دارد که میشه آبجکتی از هر نوع را وارد

آن کرد . ولی در ++C این امکان وجود نداره که بشه کالکشنی از هر نوع را ایجاد کرد !

و برای ایجاد مثلا پشته ای از یک نوع ثابت از قالب ها استفاده می کنیم :



template <calss T>
class Stack<T>{
....
}


پشته ای از نوع T تعریف میشود !

موفق باشید !

mehdi.mousavi
سه شنبه 05 آبان 1388, 12:53 عصر
من می خوام پشته ای بنویسم که بشه توی اون اشیاء مختلفی رو قرار داد مثلا یه عدد و یه رشته که با توجه به نوعش اونو تو پشته قرار بده یا خارجش کنه.
لطفا راهنماییم کنید!:عصبانی++:

سلام.
ما کلا دو نوع آرایه می تونیم داشته باشیم: homogeneous و heterogeneous. چیزی که شما دنبالش هستید آرایه از نوع دوم هستش، به معنی آرایه های "غیر متجانس" یا "ناهمگن". به این معنی که هر خونه از این آرایه می تونه تایپ متفاوتی رو در خود نگهداری کنه.

برای پیاده سازی چنین چیزی شما در C++‎ دو روش دارید:


کلیه تایپهایی که می خواهید در Array یا Stack خودتون نگه دارید رو از کلاس یکسانی Derive کنید و pointer به Base Class رو در تک تک خونه های این آرایه نگه دارید. مثلا، کلاسی داشته باشید به اسم (چه میدونم) Mammal (پستاندار) و کلیه تایپهای دیگه مثل Lion و ... از Mammal مشتق بشن. به این ترتیب، شما می تونید در عناصر مختلف این آرایه، تایپهای متفاوتی مانند Lion، Whale و ... داشته باشید که همگی توی این آرایه نگهداری بشن. بهنگام نیاز هم می تونید با استفاده از dynamic_cast به نمونه اصلی برسید...
وقتی که عناصر این آرایه type های متفاوتی دارند و نمی تونن base class یکسانی داشته باشن (بعبارت دیگه disjoint هستن)، شما می تونید با نوشتن کلاسی، داده های متفاوت رو در اون کلاس Encapsulate کنید و Pointer به اون کلاس رو بعنوان عناصر آرایه (یا Stack) ذخیره کنید. اینطوری، میتونید مدیریت حافظه رو هم به کلاس مزبور منتقل کنید و ...

موفق باشید.