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

Operator i Konstruktor C++

Object Storage Arubacloud
0 głosów
275 wizyt
pytanie zadane 15 kwietnia 2017 w C i C++ przez Programeł Gaduła (3,500 p.)

Cześć 

Mam problem z przeciążonym operatorem.Kiedy zdefiniuje konstruktor w klasie program nie chce się skompilować. Jak usunę konstruktor program się kompiluje.

klase stworzyłem w pliku nagłówkowym ale wszystko złączyłem w jeden plik aby nie wstawiać 3 code snippet (coś takiego :P) .

#include <iostream>

using namespace std;

class Time
{
private:
    int x;
    int y;
public:
    Time(int x1,int y1);
    Time operator+(const Time & t) const;
};

int main()
{
    Time czas = Time(14,10);

    return 0;
}

Time Time::operator+(const Time & t) const
{
   Time sum;
   sum.x = x + t.x;
   sum.y = y + t.y;
   return sum;
}

Time::Time(int x1,int y1)
{
    x1=x;
    y1=y;
}


Za wszelką pomoc dziękuje ;)

2 odpowiedzi

+1 głos
odpowiedź 15 kwietnia 2017 przez 10kw10 Pasjonat (22,880 p.)

Jesli tworzysz obiekt to wywolujesz konstruktor, czyli podajesz 2 inty.

Time(int x1,int y1);

A tutaj nie:

Time Time::operator+(const Time & t) const
{
   Time sum; // <--
   sum.x = x + t.x;
   sum.y = y + t.y;
   return sum;
}

Btw nie na odwrot ?

Time::Time(int x1,int y1)
{
    x1=x;
    y1=y;
}

 

komentarz 15 kwietnia 2017 przez Programeł Gaduła (3,500 p.)
Wybacz ale niedokońca to rozumiem. Co mam zrobić ?

I chyba kupiłem odrobine starą książkę (choć w to wątpie...),ponieważ mam podobnie zrobiony kod jak w książce  Stephena Praty  a nie działa :(
1
komentarz 15 kwietnia 2017 przez Evelek Nałogowiec (28,960 p.)
Przeciążony operator+ ma napisany poprawnie. Time sum; - wywołuje konstruktor bezargumentowy. Z telefonu pisze i nie mam jak sprawdzić, ale ja bym dodał jeszcze w klasie konstruktor bezargumentowy, bo ten z przeciążonego operator+ może się nie wywołać.
komentarz 15 kwietnia 2017 przez Evelek Nałogowiec (28,960 p.)
Popraw: x = x1, y = y1, tak jak 10kw10 napisał. W klasie dopisz: Time() : x(0), y(0) { }
komentarz 15 kwietnia 2017 przez Programeł Gaduła (3,500 p.)

Ok.

Zrobiłem tak i jeszcze w obiekcie (w operatorze) sum dodałem x i y i po ździwieniu program się włączył ale daje nie poprawny wynik ;(

#include <iostream>

using namespace std;

class Time
{
private:
    int x;
    int y;
public:
    Time();
    Time(int x1=0,int y1=0);
    Time operator+(const Time & t) const;
    void Wysw();
};

int main()
{
    Time czas = Time(30,20);
    Time lol = Time (10,10);
    Time lel=czas + lol;

    lel.Wysw();

    return 0;
}

Time Time::operator+(const Time & t) const
{
   Time sum(x,y);
   sum.x = x + x;
   sum.y = y + y;
   return sum;
}

Time::Time(int x1,int y1)
{
    x1=x;
    y1=y;
}

void Time::Wysw()
{
    cout<<x<<endl;
    cout<<y<<endl;
}

 

komentarz 15 kwietnia 2017 przez Evelek Nałogowiec (28,960 p.)
edycja 15 kwietnia 2017 przez Evelek
10kw10 podał dobre rozwiązanie, ale źle napisałeś kod. Jeśli chcesz skorzystać z jego, to w operator+ zamiast Time sum(x,y); napisz np. Time sum(0,0);. Ja jednak proponuję wygodniejsze rozwiązanie, abyś w operator+ nie musiał podawać argumentów, tylko wykorzystal konstruktor bezargumentowy.
komentarz 15 kwietnia 2017 przez Evelek Nałogowiec (28,960 p.)
I wraz niw poprawiłeś przypisania x = x1.
komentarz 15 kwietnia 2017 przez Programeł Gaduła (3,500 p.)
Wkońcu :D

Wielkie dzięki za pomoc ;)

musialem jedynie poprawić przypisania. Jak wkońcu pokazał mi się poprawny wynik to byłem szczęśliwy ale i zarazem zdziwiony.
0 głosów
odpowiedź 15 kwietnia 2017 przez programistalvl0hehe Nowicjusz (240 p.)

Chyba o to chodzi:

Time czas = Time(14,10);

---- nie tak.

Time czas(14,10);

-----> tak

komentarz 15 kwietnia 2017 przez 10kw10 Pasjonat (22,880 p.)
bez roznicy
komentarz 15 kwietnia 2017 przez Evelek Nałogowiec (28,960 p.)
Bez różnicy. To jest jawne wywołanie konstruktora.
komentarz 15 kwietnia 2017 przez Programeł Gaduła (3,500 p.)
Jest Jawne i nie jawne wywołanie konstruktora.

pierwsze  jest jawne (moje)

drugie nie jawne

Moja linijka kodu wiec powinna byc napweno dobra :P Ale nie jest ;(
komentarz 15 kwietnia 2017 przez Evelek Nałogowiec (28,960 p.)
Które według Ciebie to "niejawne"?
komentarz 15 kwietnia 2017 przez Programeł Gaduła (3,500 p.)
Time czas(14,10);

 

1
komentarz 15 kwietnia 2017 przez Evelek Nałogowiec (28,960 p.)
Ok, zgadza się.

Podobne pytania

0 głosów
4 odpowiedzi 16,816 wizyt
0 głosów
1 odpowiedź 149 wizyt
0 głosów
1 odpowiedź 728 wizyt

92,579 zapytań

141,432 odpowiedzi

319,664 komentarzy

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

...