Przeciążony operator =

0

Witam, chcę przeciążyć operator = tak żeby wskaźniki w obu obiektach się różniły, wiecie o co chodzi, żeby gdy przestawię/usunę jeden w pierwszym obiekcie, ten drugi został bez zmian. Póki co oba mają te same adresy ;/

#include <iostream>

using namespace std;

class A
{
	public:
	
	int * wsk;
	
	A & operator=(A * cos);
};

A & A::operator=(A * cos)
{
	int * k;
	k = new int(7);
	cos->wsk = k; cout<<"przeciazam"<<endl;
	return *(cos);
}


int main()
{
	A * a, * b;
	a = new A;
	b = new A;
	( a->wsk ) = new int(5);
	cout<<a->wsk<<endl;
	
	b = a;
	
	cout<<b->wsk<<endl;


	cout<<"\n";
	return 0;
}


//edit troche wyedytowalem

1
A & A::operator=(const A &cos)
  {
   // dwa wiersze w komentarzu, muszą być lub nie wszystko zależy jak u ciebie wyglądają konstruktory. 
   // delete[] wsk;
   // wsk=new int[7];
   memcpy(wsk,cos->wsk,7*sizeof(int));
   return *this;
  }
0

Nie bardzo chce to działać. Konstruktorów nie mam, bo to taki tylko prosty przykład na samo przeciążanie.

Z Twoimi modyfikacjami

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

class A
{
	public:
	
	int * wsk;
	
	A & operator=(const A *cos);

};

A & A::operator=(const A *cos)
  {
   // dwa wiersze w komentarzu, muszą być lub nie wszystko zależy jak u ciebie wyglądają konstruktory. 
   // delete[] wsk;
   // wsk=new int(7);
   memcpy(wsk,cos->wsk,7*sizeof(int));
   return *this;
  }
  
int main()
{
	A * a, * b;
	a = new A;
	b = new A;
	( a->wsk ) = new int(5);
	cout<<a->wsk<<endl;
	
	b = a;
	
	cout<<b->wsk<<endl;


	cout<<"\n";
	return 0;
}

Wydaje mi sie ze on w ogole nie stosuje tego przeciazonego operatora przypisania bo jak mu daje tam w srodku couta to go nie wyswietla

0
A & A::operator=(const A *cos) 

Ta linijka u ciebie chyba wygląda trochę inaczej niż u dragona co?

0

Poprawny kod:

#include <iostream>
#include <string.h>
 
using namespace std;
 
class A
{
        public:
 
        int * wsk;
 
        A & operator=(A &cos);
};
 
A & A::operator=(A &cos)
{
   // dwa wiersze w komentarzu, muszą być lub nie wszystko zależy jak u ciebie wyglądają konstruktory. 
    delete[] wsk;
    wsk=new int(7);
   //memcpy(wsk,cos.wsk,7*sizeof(int));
   return *this;
}
 
 
int main()
{
        A a;
        A b;
        ( a.wsk ) = new int(5);
        cout<<*a.wsk<<endl;
 
        b = a;
 
        cout<<*b.wsk<<endl;
 
 
        cout<<"\n";
        return 0;
}
0

Takie mam jeszcze pytanie lamerskie, dlaczego skoro = jest dwuargumentowy nie mogę napisać tych 2 argumentów tylko 1? Czy to na zewnątrz definiując operator= czy wewnątrz klasy.

0

Dlatego, że jeżeli masz metodę, to pierwszym ukrytym parametrem jest this. Jeżeli chcesz zdefiniować operator poza klasą:

A & operator=(A & ob1, A & ob2)
0

Tak a propos, patrzę i zastanawiam się czy rozumiesz różnicę pomiędzy:

new int(5);

a:new int[5];

Bo coś mi mówi że nie rozumiesz.

1 użytkowników online, w tym zalogowanych: 0, gości: 1