ABA


"צריך עזרה בנוגע לפוקנצייה במחלקה.."
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #14169 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 14169
lior066

   14:10   18.06.07   
אל הפורום  
  צריך עזרה בנוגע לפוקנצייה במחלקה..  
 
   ערכתי לאחרונה בתאריך 18.06.07 בשעה 14:12 בברכה, lior066
 
מה המצב אנשים , אז ככה אני שובר את הראש שלי עם הקוד הזה..


#include <iostream>
#include <assert.h>
using namespace std;


//Start OF Array Class -->
class Array{

private:
unsigned int size;
int *pInteger;

public:
//מאתחל את המחלקה
Array(){
size = 0;
pInteger = new int;
assert(*pInteger!=0);
};

//קופי קונסטרקטור
Array(const Array& CArray)
{
pInteger = new int(*(CArray.pInteger));
assert(CArray.pInteger!=0);
size = CArray.size;
};

//הגדרת משתנה ריק עם מספר במערך
Array(int sizeofArray)
{
size = sizeofArray;
pInteger = new int;
assert(*pInteger!=0);
};

~Array()
{
delete pInteger;
};

Array AddRows(const Array& , const Array&);
void SetRows(int ,int);
void PrintRows();

Array operator +(const Array&);
Array& operator = (const Array& );
int& operator (const int);//subscript operator
const int& operator (const int )const;//subscript operator

};

void Array::SetRows(int arr, int newsize)
{ // פונקצייה שמיישמת הצבה למשתנה
delete pInteger;
pInteger = new int;
size = newsize;
for (int i=0;i<size;i++)
*((pInteger)+i) = arr;
}
void Array::PrintRows()
{
int i;
for(i=0;i<size;i++)
cout << pInteger << "\n";
}

Array Array::AddRows(const Array &farray, const Array &sarray)
{ int i ;
if ( farray.size > sarray.size )
{
Array result(farray.size);
for (i=0;i<sarray.size;i++)
{result = farray + sarray;}

for (i=sarray.size;i<farray.size;i++)
result = farray;

cout << "Debug:\n";
for (i=0;i<farray.size;i++)
cout << result.pInteger << "\n" ;
cout << "End Debug\n";
//לבדוק למה הוא לא מחזיר לי את המערך השלם של התוצאות ורק את התוצאה הראשונה...
return result;
}
else
{ Array result(farray.size);
return result;
}

return farray;
}

Array& Array::operator = (const Array& other)
{
//if (this!=other)
//{
this->size = other.size;
delete this->pInteger;
this->pInteger = new int;
assert(this->pInteger);
int i=0;
for (;i<this->size;i++)
{ int a;

a = other.pInteger;
this->pInteger = a;
cout << "\nRow: " << i << "\n" << "a =" << a << "\n" << "this->pInteger = " << this->pInteger ;
}
return *this;
}

Array Array::operator +(const Array& sec)
{
Array result(*this);
return Array::AddRows(*this,sec);
}


int& Array::operator (const int index)//left side
{
if(index>=0 && index < size)
return pInteger;
else
cerr<<"Out of boundary of array:"<<endl;
exit(1);
}
const int& Array::operator (const int index)const //rigth side
{
if(index>=0 && index <= size)
return pInteger;
else
cerr<<"Out of boundary of array:"<<endl;
exit(1);
}


int main()
{ int data;
data = 2;
data = 5;
data = 13;
data = 4;
data = 5;
data = 75;
Array one,two;
Array tree(6);
one.SetRows(data,6);
data = 1;
data = 4;
data = 79;
data = 3;
two.SetRows(data,4);
//tree = two.AddRows(one,two);

tree = one + two;
//Array tree(two.AddRows(one,two));
one.PrintRows();
cout << "\n";
two.PrintRows();
cout << "\n";
tree.PrintRows();
cout << "\n";
cin >> data;
}

כאשר הפקודה הזאת היא הבעייתית:


tree = one + two;


ממ שהצלחתי להבין מהדיבאגינג זה שבפונקצייה AddRows ההחזרה של האובייקט לא נכונה.

יש לי אובייקט שבנוי מ pInteger שזה מצביע ובו יש מערך של מספרים.


כאשר אני משתמש באובייקט שהוחזר משום מה הוא מחזיר לי בתוך המצביע רק את הכניסה הראשונה וכל השאר מתאפס לי..

Debug:
3
9
92
7
5
75
End Debug

Row: 0
a =3
this->pInteger = 3
Row: 1
a =-33686019
this->pInteger = -33686019
Row: 2
a =393236
this->pInteger = 393236
Row: 3
a =14483677
this->pInteger = 14483677
Row: 4
a =3473944
this->pInteger = 3473944
Row: 5
a =3473944
this->pInteger = 34739442

3
-33686019
393236
14483677
3473944
3473944


בין ה דיבאג לאנדדיבאג זה מה שאמור לחזור לי בסוף וזה הערך המקורי של המערך של המצביע בפונקצייה לפני שהוא מבצע החזרה.

איפה שיש את נ this->pinteger וכל זה זה הפונקצייה של האופורטור = שאמורה להכניס לי את הערכים של האובייקט שהוחזר לתוך האובייקט שאני רוצה.

ומה שאחרי זה התוצאה הסופית ...

משהו לא מסתדר לי מבחינה לוגית אני רואה את הכל נכון פה ..
בבקשה אני צריך עזרה פה.


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  עדיין רלוונטי ? Net_Boy  28.06.07 20:44 1

       
Net_Boy  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 1.4.02
17151 הודעות, 1 פידבק
   20:44   28.06.07   
אל הפורום  
  1. עדיין רלוונטי ?  
בתגובה להודעה מספר 0
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net