Mam pytanie z programowania, a na forach tematycznych ci co wiedzą, nie powiedzą, a ci co myślą, że wiedzą, to nie są mi w stanie pomóc. Chodzi mi o kopiowanie wartości obiektów klas stworzonych samemu. Chce przepisać niejako wszystkie wartości z jednego obiektu do kolejnego, ale kod:
for(int i=0;i<10;i++)
obiekt1[i]=obiekt2[i];
powoduje przypisanie obiektów, referencję, przez co zmiana jednego powoduję zmianę drugiego, co jest zbędne i przeszkadzające. Gdy dla przykładowej klasy
to przy 100 wartościach, czy 200 jakich potrzebuje taki system nie zdaje egzaminu. Jak mogę w jednej linijce kopiować same wartości z obiektu nie przypisując do siebie samych obiektów?
Pytanie co przechowują tablice obiekt1 i obiekt2, jeśli wskaźniki jak sugeruje trzeci kod, to przepisane zostaną wartości wskaźników, a nie obiekty. To, czy takie zachowanie ma sens, zależy od konkretnego przypadku. Trzeci przykład kodu jest raczej mało sensowny. Jeśli już, to *(obiekt1_) = *(obiekt2__), o ile te tablice przechowują wskaźniki._
tablice przechowują i wskaźniki i zwykłe zmienne. Trzeci przykład kodu powoduje kopiowanie samych wartości krok po kroku, może nie powinien, nie wiem, ale to robi. *(obiekt1_) = *(obiekt2__) powoduje: error C2582: ‘operator =’ function is unavailable in ‘KPlanPelny’_
Najlepiej zawsze w klasie jest stworzyć konstruktor kopiujący oraz przeciążyć operator =. kiedys dla zabawy mapisałem sobie taka klase mam nadzieje że Ci pomoże :
class pierwsza
{
protected:
int * wiek;
string imie;
public:
pierwsza(void)
{
wiek = new int(0);
imie = "nie podano";
cout<<"\nkonstruktor domniemany klasa pierwsza\n";
}
pierwsza(int ile, string nazwa) : imie(nazwa)
{
wiek = new int(ile);
cout<<"\nkonstruktor podstawowy klasa pierwsza\n";
}
pierwsza(const pierwsza & wzor)
{
wiek = new int;
*wiek = *(wzor.wiek);
imie = wzor.imie;
cout<<"\nkonstruktor kopiujacy klasa pierwsza\n";
}
~pierwsza()
{
delete wiek;
imie = "";
cout<<"destruktor klasa pierwsza";
}
pierwsza & operator= (const pierwsza & wzor)
{
//spr czy nie sam na siebie//
if(this==&wzor) return * this;
//czesc destrukcyjna//
delete wiek;
imie = "";
//czesc przypisywania;
wiek = new int;
*wiek = *(wzor.wiek);
imie = wzor.imie;
cout<<"\npszypisanie klasa pierwsza\n";
return *this;
}
void kurczak()
{
cout<<"kukuryku";
}
friend ostream & operator << ( ostream & ekran, const pierwsza & wzor)
{
ekran<<"Imie: "<
return ekran;
}
};
Świetne przedstawienie konstruktorów :). Pomocne, choc mi chodziło o coś na skróty. Konstruktora nie mam, ale stworzyłem sobie funkcję kopiującą, która, jak konstruktor krok po kroku, zmienna po zmiennej kopiuje same wartości, ale musiałem wypisać wszystkie zmienne z palca, a myślałem,że da się w jednej linijce. Nie mniej wielkie dzięki za odpowiedź, kilka pomysłów mi do czegoś jeszcze podsunąłeś
A przeczytałeś moją odpowiedź co jest poniżej? Blapiter przeczytał i dał inną radę, niestety dłuższą w zapisie, a podana przez nr42 nie działa, co już zresztą napisałem,oraz podałem kod błędu.