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

Mały problem z konstruktorem

0 głosów
104 wizyt
pytanie zadane 9 stycznia w C i C++ przez czujek22 Gaduła (4,940 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 przez mbabane Pasjonat (21,980 p.)
a jak sie wywoluje konstruktor (czy tez zwykla funkcje), ktory przyjmuje wiecej niz jeden parametr?
komentarz 9 stycznia przez czujek22 Gaduła (4,940 p.)
edycja 9 stycznia 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 przez Mateusz1223 Użytkownik (700 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 przez czujek22 Gaduła (4,940 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 przez Mateusz1223 Użytkownik (700 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
3 odpowiedzi 142 wizyt
pytanie zadane 16 czerwca 2015 w C i C++ przez tarnasm Gaduła (3,010 p.)
0 głosów
1 odpowiedź 52 wizyt
0 głosów
1 odpowiedź 48 wizyt
pytanie zadane 30 marca w C i C++ przez Meeto93 Gaduła (3,580 p.)
...