Wpis z mikrobloga

Ogarniam obiektowe c++ i natkanlem sie na taki problem, tworze klase ktora dziedziczy z klasy Rozpocznij

class LinkWyszukiwarki: Rozpocznij
{
public:
LinkWyszukiwarki();
~LinkWyszukiwarki();

string StworzSciezke();
private:

};

Rozpocznij ma taki konstruktor:
Rozpocznij::Rozpocznij(string marka, string rok1, string rok2, string silnik, string wojewodztwo, string login, string haslo, string dostawca)

I dostaje bladno default constructor exists for class "Rozpocznij"
I ni cholera tego nie rozumiem ( ͡° ʖ̯ ͡°)
O co tu chodzi Mircy?

#programowanie #cpp
  • 15
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

na c++ się słabo znam, tym bardziej nie chce mi się analizować tego problemu. Ale skoro uczysz się obiektowości, to ucz się jej dobrze - klasa powinna być rzecznikiem, czasownikami natomiast nazywany metody ;)
  • Odpowiedz
@Horvitz: chodzi o to, że jeśli klasa B dziedziczy po A, a żeby utworzyć obiekt A musisz do konstruktora przekazać jakieś parametry, to żeby utworzyć obiekt B też musisz przekazać te parametry, bo skąd ma wiedzieć jak utworzyć obiekt dziedziczący po A, skoro nie wie jak uzupełnić to co było w A?

Przykład:
class A {
A(int x) { /* ... */
  • Odpowiedz
@Dejna93: sorki, delegacja jest chyba od C++11 i dotyczy konstruktorów w obrębie jednej klasy. To tutaj to konkretniej lista inicjalizacyjna. Niby nazewnictwo, ale nie chcę wprowadzać w błąd :)

@Horvitz: nie słuchaj innych co mówią że musisz zrobić konstruktor domyślny. Nie musisz, ale jeśli go nie masz to musisz sprecyzować który ma zostać uruchomiony. Konkretniej chodzi o to, że obiekt klasy B (z mojego przykładu) nie może byc
  • Odpowiedz
@Dejna93: nom, mają swoje różnice, np. brak wielodziedziczenia i używane są np. super() z tego co pamiętam czy jakoś tak

Ja tam polecam
a) megatutorial C++ od Xiona
b) cplusplus.com i ew. cppreference.com

Śmiem powiedzieć, że do wszystkich podstawowych i umiarkowanych rzeczy te źródła starczają.
  • Odpowiedz
@Horvitz: Jak tworzysz jakiś niedomyślny konstruktor to odrazu nadpisujesz ten domyślny i w twoim przypadku nie wołając jawnie konstruktora bazowego kompilator chciałbym wywołać konstruktor domyślny ale takiego nie ma... Rozwiązanie takie że definiujesz pusty konstruktor w klasie bazowej np tak:
Rozpocznij() {} lub korzystajac z c++11 Rozpocznij() = default; ( ͡º ͜ʖ͡º)
  • Odpowiedz