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

konstruktor kopiujacy

Object Storage Arubacloud
0 głosów
134 wizyt
pytanie zadane 13 lutego 2016 w C i C++ przez Ziuziek Mądrala (5,140 p.)
#include <iostream>
 
using namespace std;
 
class Rectangle
{
    int a,b;
public:
    int width, height;
    Rectangle(int _a = 1, int _b = 2)
    {
        a = _a;
        b = _b;
    }
    void set_values(int a, int b)
    {
        width = a;
        height = b;
    }
    int area (void)
    {
        return (width * height);
    }
    Rectangle(const Rectangle &kopia)
    {
        width = kopia.width;
        height = kopia.height;
    }
};
 
int main()
{
    Rectangle a;   // utworzenie obiektu a
    a.set_values(2,3); //wywolanie metody ustawienia
    cout << a.area() << endl; 
    Rectangle b(a); //skopiowanie obiektu a do b
    cout << b.area() << endl; 
    Rectangle kopia(5,52); //<< o co tutaj chodzi i czemu
    cout << kopia.area() << endl; //nie wyswietla tu wyniku << tylko 0
    cout << b.area() << endl;
    return 0;
}

Czy dobrze opisalem w komentarzach w kodzie??

I jezeli mozna kopiowac obiekty w mainie to po co konstuktor kopiujacy w klasie i po co on?

1 odpowiedź

0 głosów
odpowiedź 14 lutego 2016 przez Grzyboo Nałogowiec (28,860 p.)

Konstruktor kopiujący nie jest Ci potrzebny, bo klasa definiuje taki automatycznie. Tego typu konstruktor przydaje się gdy w obiekcie jest zaalokowana jakaś pamięć (mamy wskaźnik do czegoś) i kopiujemy to coś, zamiast kopiować wskaźnik.

 

Dlaczego wyświetla 0? To proste. Prześledź co się dzieje.

Rectangle kopia(5,52); - tworzy obiekt Rectangle i używa pierwszego konstruktora, czyli ustawia na 5 oraz b ma 52. 

cout << kopia.area() << endl; - Wyświetla pole, a więc width * height obiektu kopia. Width i height nie są ustawione, więc nic dziwnego, że wynik jest równy 0. Przecież konstruktor nie ustawia width oraz height tylko a oraz b.

Podobne pytania

0 głosów
1 odpowiedź 369 wizyt
0 głosów
3 odpowiedzi 1,909 wizyt
pytanie zadane 9 lutego 2016 w C i C++ przez Ziuziek Mądrala (5,140 p.)
0 głosów
1 odpowiedź 422 wizyt
pytanie zadane 28 kwietnia 2018 w C i C++ przez konu33 Nowicjusz (210 p.)

92,576 zapytań

141,426 odpowiedzi

319,651 komentarzy

61,961 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!

...