Strona główna > C++, Definiowanie klas > Definiowanie klas C++ (Samochód)

Definiowanie klas C++ (Samochód)

9 Grudzień 2009 Dodaj komentarz Go to comments
//Definiowanie klas na przykładzie samochodu
# include <iostream>
#include <cstdlib>

using namespace std;
class samochod
{
      string kolor;
      string marka;
      double stan_baku;
public:
       void zatankuj();
       void wpisz_dane(string color, string typ);
       string opis();
};

void samochod::zatankuj()
{
     stan_baku = 100;
     cout<<"Stan baku = "<<stan_baku<<endl;
}
void samochod::wpisz_dane(string color, string typ)
{
     kolor = color;
     marka = typ;
}
string samochod::opis()
{
       string dane ="Nasz samochod jest marki: " + marka +
       " , i ma " + kolor + " kolor. ";
       return dane;
}
int main ()
{
    string lakier;
    string marka;
    samochod nowy; //tworzymy obiekt
    cout<<"Podaj marke:  ";
    cin>>marka;
    cout<<"Podaj kolor karoserii: ";
    cin>>lakier;
    nowy.wpisz_dane(lakier, marka);
    nowy.zatankuj();
    cout<<nowy.opis()<<endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}
  1. StilL
    2 Luty 2010 o 7:10 pm

    Witam.
    Jestem początkującym programistą i właśnie po raz pierwszy napisałem swój program w C++. Niestety nie kompiluje się. Oto kod:

    ——————————————-
    # include
    using namespace std;

    class Obiekt {
    private:
    int x,y,r;

    public:
    Obiekt();
    int getx();
    int gety();
    int getr();
    };

    Obiekt::Obiekt() {
    x = 320;
    y = 240;
    r = 5;
    }
    int Obiekt::getx() { return x; }
    int Obiekt::gety() { return y; }
    int Obiekt::getr() { return r; }

    int main() {

    Obiekt kulka();
    cout<<kulka.getx();
    }
    ——————————————-

    Kompilator (Dev-C++ 4.9.9.2) wyświetla następujący komunikat:
    "27 D:\Dev-Cpp\Gra\testing.cpp request for member `getx' in `kulka', which is of non-class type `Obiekt ()()' ".

    Co jest powodem tego błędu? Dziękuję za pomoc🙂

  2. 2 Luty 2010 o 8:39 pm

    Witaj,
    prześlij mi swój kod na: nmhhod@lykamspam.pl wydaje mi się ze w komentarzu ucięło część.

  3. 13 Luty 2010 o 7:15 pm

    Ten kod jak każdy inny mi się nie kompiluje. Nie znajduje funkcji system. Dlaczego jej używasz? To ma być aplikacja strumieniowa więc używaj strumieni do oczekiwania na znak skoro jest to potrzebne😀

    Swoją drogą, ile się już C++ uczysz?

  4. 14 Luty 2010 o 8:20 am

    Hym… używam darmowego Dev C++ 4.9.9.2 i wszystko się kompiluje. Sprawdziłem przed chwilą jak również poprosiłem kolegę o sprawdzenie, więc wszystko powinno być dobrze.
    Pozdrawiam :]

    Ps. C++ uczę się bardzo krótko😛

  5. 14 Luty 2010 o 10:34 am

    A ja posiadam Linuksa i gcc4.

    I dam Ci dobrą radę, nie ucz innych jak sam krótko się uczysz. Nic dobrego z tego nie wyjdzie. I zrób coś z tym system(‚pause’) bo to nie pasuje do aplikacji strumieniowych.

    • 14 Luty 2010 o 11:29 am

      Dzięki za radę, jednak jeśli przyglądałeś się całościowo blogowi to w żadnym słowie nie określiłem się mianem nauczyciela, co więcej tytuł bloga to: Czas na zeszyt (Czyli wirtualne notatki), traktuję go jako zeszycik z którego przy okazji korzysta wiele osób, a jeśli w komentarzu ktoś prosi o pomoc (wytłumaczenie) to staram się odpowiadać o ile potrafię.

      Co do system („pause”) to zwykłe zatrzymanie okienka. Zmiana jednej linijki chyba nie jest problemem dla nikogo.

  6. 14 Luty 2010 o 10:04 pm

    Ale takiego bloga odwiedzi koleś w 100% zielony. I to nie jest zatrzymanie okienka😐 Poczytaj czym się różni aplikacja strumieniowa (taka jaką akurat Ty piszesz) od aplikacji konsolowej (np. w ncurses). Strumieniowych się nie stopuje, to tylko głupi nawyk programistów z Windowsa. A jeżeli już chcesz „zatrzymywać” to użyj odpowiedniego do całości cin.get(); (jak mnie pamięć nie myli).

  7. proelo
    15 Luty 2010 o 12:15 pm

    cin.get(); to to samo ci system(„pause”);

  8. 15 Luty 2010 o 1:10 pm

    Rozumiem, że to wygląda dosyć dziecinnie, ale jeśli program służy tylko temu by pokazywał w konsoli wynik to chcąc nie chcąc muszę go zatrzymać, np żeby sprawdzić efekty. Np. jeśli program ma liczyć wartość ciągu a nie zapisuje on wyniku do pliku to chyba oczywiste jest zatrzymanie konsoli w celu sprawdzenia go. I dla większości osób, które odwiedzają bloga moje programy są bardzo czytelne.
    I tak jak pisałem wyżej jeśli okrutnie rani Cię system(„pause”); zawsze mozesz wklepać swoje:
    cin.ignore();
    cin.get(); 🙂

  9. 15 Luty 2010 o 5:19 pm

    @proelo

    To nie to samo…

    @no25

    Program strumieniowy powinieneś uruchomić samemu w konsoli, przez co automatycznie nie zamknie się ona po wykonaniu programu. Funkcja system nie jest częścią biblioteki iostream, została tylko mylnie dołączona biblioteka cstdlib w której znajduje się funkcja system. Jest to kwestia przypadku na danej konfiguracji (kompilator i system). Nie czepiałbym się, gdybyś dołączył też inną bibliotekę.

    Co do tematu to radzę poczytać http://www.coderscity.net/sutra126304.html#126304

  10. 15 Luty 2010 o 8:32 pm

    //opisy z powyższego adresu:
    system(„PAUSE”) – sposób jeszcze gorszy od poprzedniego. Jest mało efektywny, wymaga uruchomienia przez środowisko dodatkowych programów, działa tylko na systemach Windows (i to nie jest gwarantowane, że na każdym).

    Hymm… według tego system(„pause”) ma dwa minusy:
    -działa tylko pod Windowsem,
    -uruchamia środowisko dodatkowych programów.

    cin.get() z iostream oraz getchar() z stdio.h – trochę lepsze niż poprzednie, ale nie działają do końca tak, jak byśmy sobie tego życzyli. Przede wszystkim, są to funkcje do obsługi strumieni, nie mają zielonego pojęcia o istnieniu klawiatury i o wciskaniu klawiszy. Program, jeśli jest uruchomiony w konsoli, co prawda się zatrzyma, ale wcale nie ruszy dalej po wciśnięciu dowolnego przycisku. Najczęściej (ale nie zawsze, kolejny niepewny punkt!) dane z konsoli przesyłane są do strumienia dopiero po wciśnięciu klawisza ENTER, więc użytkownik może wpisać całkiem długi elaborat, zanim jego program ruszy dalej. Co gorsza, wszystko, co wpisał (nie tylko pierwszy znak), zostanie przesłane do strumienia wejściowego programu, więc przy kolejnych próbach komunikacji z użytkownikiem może on nie mieć możliwości wpisania czegokolwiek, bo w strumieniu już będą dane.

    Dużym minusem cin.get(); jest to, że:
    -po zatrzymaniu trzeba wcisnąć enter [przy system(„pause”) nie trzeba]
    -wszystko co jest wpisywane po zatrzymaniu zostaje przesłane do strumienia wejściowego (o kolejnych próbach komunikacji też jest co nieco opisane)

    Oba sposoby mają wady i zalety. Faktem przekonującym mnie do tego by spróbować metody z cin.get(); jest to, że działa pod innymi systemami, bo w końcu klient (czytelnik) nasz pan🙂

  11. 15 Luty 2010 o 10:46 pm

    Co do pisania elaboratów z klawiatury, to wystarczy poinformować, że program zakończył swoje działanie i należy nacisnąć ENTER by zakończyć. Lepsze, bo nie ma narzuconego tekstu jak w system(‚pause’)

    Najlepszym rozwiązaniem jest nie używać takich rzeczy i używać aplikacji strumieniowych tak jak trzeba, czyli samemu odpalać w konsoli.

  1. 13 Luty 2015 o 4:35 pm
  2. 25 Luty 2015 o 11:55 pm

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Log Out / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Log Out / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Log Out / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Log Out / Zmień )

Connecting to %s

%d bloggers like this: