PDA

View Full Version : سوال: تعریف جدید نوع داده



hatamiarash7
دوشنبه 10 آذر 1393, 20:41 عصر
با عرض سلام و خسته نباشید

میخواستم بدونم چطور میشه یک نوع جدید از داده تعریف کرد مثل int - float - char

میخوام یه نوع جدید تعریف کنم که فقط مخصوص آرایه ها باشه به اسم intarr که هر شی از این نوع تعریف بشه ، در واقع یک آرایه باشه که بتونم یه سری عملگر ها هم بصورت مجزا برای آرایه ها تعریف کنم مثلا عملگر + بیاد تک تک خونه های دو آرایه رو نظیر به نظیر باهم جمع کنه

چطور میتونم این کار رو کنم ؟

aliv.2022
دوشنبه 10 آذر 1393, 21:09 عصر
شما باید یه کلاس بنویسی که یه متغیر آرایه داره و بعد برای اون عملگرهای + و [] رو سربارگذاری (overload) کنی البته متغیر آرایت باید آرایه پویا باشه و تو مخرب کلاست حافظه ها رو پس بگیری!

rahnema1
دوشنبه 10 آذر 1393, 21:12 عصر
توی کتابخانه استاندارد valarray هست که همچین قابلیتی داره

hatamiarash7
دوشنبه 10 آذر 1393, 22:33 عصر
شما باید یه کلاس بنویسی که یه متغیر آرایه داره و بعد برای اون عملگرهای + و [] رو سربارگذاری (overload) کنی البته متغیر آرایت باید آرایه پویا باشه و تو مخرب کلاست حافظه ها رو پس بگیری!

عملگر [] رو چجوری باید بنویسم ؟؟؟؟؟؟ اگه تابع عملگر رو بصورت [] operator بنویسم خودش تشخیص میده که مثلا [5] باید آرایه پویا رو 5 خونه ای کنه ؟؟؟؟

aliv.2022
سه شنبه 11 آذر 1393, 12:37 عصر
#include <iostream>
using namespace std;
class intarr{
private:
int *a;
int arrlong;
public:
intarr(int index){
a = new int[index];
arrlong = index;
}
~intarr(){ delete a; }
int& operator[](int index){
return a[index];
}
// (halate 1)
intarr& operator+(intarr x){
int newindex;
if ((*this).arrlong > x.arrlong)
newindex = (*this).arrlong;
else
newindex = x.arrlong;
intarr *temp=new intarr(newindex);
for (int i = 0; i < newindex; i++)
(*temp)[i] = (*this)[i] + x[i];
return *temp;
}
//(halate 2)
/* intarr& operator+(intarr x){
int newindex;
if ((*this).arrlong > x.arrlong)
newindex = (*this).arrlong;
else
newindex = x.arrlong;
static intarr temp(newindex);
for (int i = 0; i < newindex; i++)
temp[i] = (*this)[i] + x[i];
return temp;
}*/
};

int main(){
intarr a(5), b(5), c(5);
a[0] = 1;
a[1] = 2;
a[2] = 3;
a[3] = 4;
a[4] = 5;
b[0] = 5;
b[1] = 6;
b[2] = 7;
b[3] = 8;
b[4] = 9;
c=a+b;
int x=4;
cout << a[x] << " + " << b[x] << " = " <<c[x]; //5+9=14
return 0;
}



این برنامه الان 2 تا مشکل داره
یکی این که زمان تعریف آرایه باید از () استفاده کنی
یکی این که تو حالت اول اپراتور +، نمیشه حافظه temp رو delete کرد! تو حالت دوم هم حقیقتا بلد نیستم static رو delete کنم!