• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Co to jest konstruktor kopiujący oraz operator '=' i jak tworzy się je?

Object Storage Arubacloud
0 głosów
16,758 wizyt
pytanie zadane 13 grudnia 2015 w C i C++ przez Piotr21 Nowicjusz (190 p.)
Witam,
Zapwane te tematy były już poruszane, lecz nie mogę znaleźć konkretej informacji do czego służy i jak się używa konstruktora kopiującego oraz operatora "=".

Pomoże ktoś?
Z góry dziękuję za odpowiedź

4 odpowiedzi

+2 głosów
odpowiedź 13 grudnia 2015 przez Surykat Stary wyjadacz (14,780 p.)

Piszesz wersje konstruktora, który przyjmuje w parametrze obiekt swojego typu i odpowiednio przepisujesz wartości, do nowego obiektu.

Przykład:

class Kot
{
string imie;
string umaszczenie;
int waga;

Kot(Kot kocurek) //konstruktor koopiujący
{
 imie = kocurek.imie;
 umaszczenie = kocurek.umaszczenie;
 waga = kocurek.waga
}
}

W efekcie otrzymujesz 2 identyczne obiekty klasy Kot.

komentarz 13 grudnia 2015 przez Szykem2 Nałogowiec (29,510 p.)
Twój przykład jest błędny.Jeżeli wysyłasz obiekt do konstrutora przez wartość to wywoła konstruktor kopiujący, żeby stworzyć obiekt, na podstawie którego będzie tworzony nowy obiekt. W sensie zrobłeś zwykły konstruktor a nie kopiujący.
komentarz 13 grudnia 2015 przez Ehlert Ekspert (212,670 p.)

Zakładając, że kocurek jest gruby i dajmy taki przykład że waży 1GB to program zjada cały ram. Nie lepiej wysłać tak:

Kot(const Kot & grubyKocurek);

 

komentarz 13 grudnia 2015 przez Surykat Stary wyjadacz (14,780 p.)
Okey, rozumiem. :)
+1 głos
odpowiedź 13 grudnia 2015 przez Szykem2 Nałogowiec (29,510 p.)

Konstruktor kopiujący to kostruktor, który przyjmuje referencję do swojego typu i tworzy identyczny obiekt, a operator = równierz przyjmuje referencję i zmienia istniejący obiekt na identyczny.

class A
{
public:
    A() {}
    A(const A& obj): b(obj.b)   //przesyłasz przez stałą(!) referencję chyba że masz uzastadniony przypadek, że musi być przez niestałą. Tworzysz nowy obiekt
    {}
    A& operator=(const A& obj) //modyfikujesz istniejący obiekt
    {
        b = obj.b;
        return *this;
    }
private:
    int b;
};

UWAGA:
A a;
a.b = 5;
A b = a; //Konstruktor kopiujący
A c(a)l // Konstruktor kopiujący
b=a; //operator przypisania

 

+1 głos
odpowiedź 13 grudnia 2015 przez niezalogowany

Przykład konstruktora kopiującego i operatora przypisania:

#include <iostream>
using namespace std;

class A
{
	int a;
	int b;
	public:
	A(int aa=0,int bb=0)
	{
		a=aa;
		b=bb;
	}
	A(const A &f)//konstruktor kopujący
	{
		a=f.a;
		b=f.b;
	}
	A & operator=(const A &f)//operator przypisania
	{
		if(this != &f)
		{
			a=f.a;
			b=f.b;
		}
		return*this;
	}
};

int main()
{
	A a(2,3);
	A b(a);
	A c=a;//niejawna konwersja zostanie wywołany konstruktor kopiujący
	A d;
	d=a;//zostanie wywołany operator przypisania
}

 

+1 głos
odpowiedź 13 grudnia 2015 przez Piotr21 Nowicjusz (190 p.)
Dziękuje wam za wypowiedzi i pomoc

Podobne pytania

0 głosów
2 odpowiedzi 678 wizyt
0 głosów
1 odpowiedź 421 wizyt
pytanie zadane 28 kwietnia 2018 w C i C++ przez konu33 Nowicjusz (210 p.)
–1 głos
1 odpowiedź 803 wizyt

92,539 zapytań

141,382 odpowiedzi

319,481 komentarzy

61,928 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...