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

Mały problem z konstruktorem

Ultraszybki serwer VPS NVMe BIZNES
0 głosów
107 wizyt
pytanie zadane 9 stycznia 2017 w C i C++ przez czujek22 Mądrala (5,830 p.)

Witam. Dopiero zaczynam obiektówkę i po przerobieniu 10 zadań bez problemów, problem wyskakuje w najmniej oczekiwanym miejscu :D

plik naglowkowy:

#ifndef RACHUNEK_H_INCLUDED
#define RACHUNEK_H_INCLUDED

class Rachunek
{
    std::string nazwisko;
    std::string nr_rachunku;
    double saldo;
public:
    Rachunek();
    Rachunek(std::string name,std::string nr,double s = 0.0);
    ~Rachunek(){};
    void show();
    void give(const double m);
    void get(const double m);

};

#endif // RACHUNEK_H_INCLUDED

plik cpp:

#include <iostream>
#include "rachunek.h"
using namespace std;

Rachunek::Rachunek() //domyslny
{
    nazwisko = "Nie podano";
    nr_rachunku = "0000-0000-0000-0000";
    saldo = 0.0;
}
Rachunek::Rachunek(string name, string nr, double s = 0.0) //wlasny
{
    nazwisko = name;
    nr_rachunku = nr;
    saldo = s;
}

....

Tworzę obiekt

Rachunek k1("Brak""Brak");

Błąd wyskakuje przy tworzeniu obiektu jak i przy definicji konstruktora wlasnego czyli cos musi byc z nim nie tak a nie wiem co :(

2
komentarz 9 stycznia 2017 przez mbabane Nałogowiec (31,620 p.)
a jak sie wywoluje konstruktor (czy tez zwykla funkcje), ktory przyjmuje wiecej niz jeden parametr?
komentarz 9 stycznia 2017 przez czujek22 Mądrala (5,830 p.)
edycja 9 stycznia 2017 przez czujek22
A no tak, nie zauwazylem braku przecinka. Jednak bardziej mnie interesuje, dlaczego nie wykrywa składowych w konstruktorze.

Edit. Błędem było przypisanie w definicji konstruktora w pliku cpp :)

1 odpowiedź

0 głosów
odpowiedź 11 stycznia 2017 przez Mateusz1223 Użytkownik (910 p.)

A spróbuj zrobić jeden konstruktor.

Np. tak

Rachunek::Rachunek(string name="Nie podano", 
string nr="0000-0000-0000-0000", 
double s = 0.0) 
{
    nazwisko = name;
    nr_rachunku = nr;
    saldo = s;
}

 

komentarz 11 stycznia 2017 przez czujek22 Mądrala (5,830 p.)

Na stackoverflow ktoś podsunął mi abym stosował konstruktor domyslny w stylu c++11:
 

Rachunek::Rachunek    :    Rachunek("Nie podano", "0000-0000-0000-0000", 0.0)
{
}

Zapis działa, ale pierwszy raz się z czymś takim spotkałem. Byłby ktoś w stanie wytłumaczyć co to za dwukropek ?

1
komentarz 11 stycznia 2017 przez Mateusz1223 Użytkownik (910 p.)
Jest to cos jakby wywołanie konstruktora. Zresztą zobacz sam:

Działa to podobnie jak użycie inicjowania w konstruktorze, jednak w przypadku instrukcji inicjujących pola będą zainicjowane w trakcie tworzenia klasy, a nie po utworzeniu jej obiektu.

https://pl.wikibooks.org/wiki/C%2B%2B/Konstruktor_i_destruktor

Znajdziesz to pod hasłem instrukcje inicjalizujące.

Podobne pytania

0 głosów
1 odpowiedź 48 wizyt
0 głosów
1 odpowiedź 58 wizyt
pytanie zadane 30 marca 2017 w C i C++ przez Meeto93 Gaduła (3,600 p.)
0 głosów
2 odpowiedzi 122 wizyt
Porady nie od parady
Komentarze do pytań nie służą do odpowiadania, od tego jest wydzielona sekcja odpowiedzi. Funkcją komentarzy jest natomiast możliwość uzyskania dodatkowych informacji na temat samego posta.
Ciekawy innych porad? Odwiedź tę stronę!

44,063 zapytań

83,829 odpowiedzi

166,829 komentarzy

21,053 pasjonatów

Przeglądających: 153
Pasjonatów: 6 Gości: 147

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...