Avatar
davaj
Člen
Avatar
davaj:

Ahoj,
prosim Vas ucim se OOP v jazyce C++. Momentalne umim v OOP jen nejake vypisy, ale neumim pracovat s hodnotami funkci v dane tride. Kde hodnota jedne funkce ma vracet hodnotu, na kterou bude zavisla dalsi funkce a podle te dane hodnoty vrati svou hodnotu nebo nejaky vypis
Prochazel jsem si clanky Arena, ale porad to neumim implikovat do vlastniho projektu a napadu.
Treba jsem si vytvoril tridu s kockami. Chtel bych vytvorit funkci, ktera vrati kocku, co nabehala nejvice. Ovsem to mi nejde. Dekuji za rady. Prikladam ten muj priklad.
Na otazky proc se ucim C++. Na skole mame C,C++, takze C++ se chci naucit s nejakym predskokem, abych pak mel cas na uceni jineho jazyka.

#include <cstdlib>
#include <iostream>
#include "Kocka.h"

using namespace std;
int main()
{
    Kocka micka("Matous",7,"cerna");
    Kocka micka2("Samik",8,"cerno-bila");
    Kocka micka3("Sofina",1,"seda");
    micka.pozdrav();
    micka2.pozdrav();
    micka3.pozdrav();
    micka.behej();
    micka2.behej();
    micka3.behej();

    system("PAUSE");
    return 0;
}
#include "Kocka.h"
#include <conio.h>
#include <cstdlib>

#include <iostream>
using namespace std;

Kocka::Kocka(string jmeno,unsigned int vek,string barva_srsti)
{
    //Nastavime spravne hodnoty ukazatelem this->
    this->barva_srsti=barva_srsti;
    this->jmeno=jmeno;
    this->vek=vek;
}
Kocka::~Kocka()
{
}
void Kocka::pozdrav()
{
    cout <<"Ahoj jmenuji se " << jmeno
        <<" mam " << vek << " let a moje srst je " << barva_srsti << endl;
}
int Kocka::behej()
{
    char volba='a';
    int i=0;
    cout << "Vitej kocko " << jmeno << endl;
    cout << "Zacni behat stisknutim klavesy (w). Dokonci beh (q)." << endl;
    while(volba!='q'){
        volba = getch();
        i++;
    }
    cout << "Ubehnuta vzdalenost: " << i << endl;
    return i;
}
#ifndef KOCKA_H
#define KOCKA_H

//kvuli string, vyhnuti se std::
#include <iostream>
using namespace std;

//trida
class Kocka
{
    public:
        //konstruktor
        Kocka(string jmeno,unsigned int vek,string barva_srsti);
        //destruktor
        ~Kocka();
        void pozdrav();
        int behej();
        //void poradi_behu(string jmeno);
        string jmeno;
    //chranena
    protected:

    //soukroma
    private:

        unsigned int vek;
        string barva_srsti;
};
#endif // KOCKA_H
Editováno 17.10.2014 14:53
 
Odpovědět 17.10.2014 14:48
Avatar
gcx11
Redaktor
Avatar
Odpovídá na davaj
gcx11:

Tak si vytvoř další atribut nebo vlastnost nabehano a potom použij tu. Do ní si ulož, kolik kočka naběhá a jednotlivé hodnoty porovnej.

 
Nahoru Odpovědět 17.10.2014 16:28
Avatar
davaj
Člen
Avatar
Odpovídá na gcx11
davaj:

Ja to tak zkousel, ale podarilo se mi to az ted. :)

#include <cstdlib>
#include <iostream>
#include "Kocka.h"

using namespace std;
int main()
{
    Kocka micka("Matous",7,"cerna");
    Kocka micka2("Samik",8,"cerno-bila");
    Kocka micka3("Sofina",1,"seda");
    micka.pozdrav();
    micka2.pozdrav();
    micka3.pozdrav();
    cout << endl;
    micka.nabehano(micka,micka2,micka3);

    system("PAUSE");
    return 0;
}
#include "Kocka.h"
#include <conio.h>
#include <cstdlib>

#include <iostream>
using namespace std;

Kocka::Kocka(string jmeno,unsigned int vek,string barva_srsti)
{
    //Nastavime spravne hodnoty ukazatelem this->
    this->barva_srsti=barva_srsti;
    this->jmeno=jmeno;
    this->vek=vek;
}
Kocka::~Kocka()
{
}
void Kocka::pozdrav()
{
    cout <<"Ahoj jmenuji se " << jmeno
        <<" mam " << vek << " let a moje srst je " << barva_srsti << endl;
}
int Kocka::behej()
{
    char volba='a';
    int i=0;
    cout << "Vitej kocko " << jmeno << endl;
    cout << "Zacni behat stisknutim klavesy (w). Dokonci beh (q)." << endl;
    while(volba!='q'){
        volba = getch();
        i++;
    }
    cout << "Ubehnuta vzdalenost: " << i-1 << endl << endl;
    return i-1;
}
void Kocka::nabehano(Kocka Mica, Kocka Mica2, Kocka Mica3)
{
    int a = Mica.behej();
    int b = Mica2.behej();
    int c = Mica3.behej();

    if((a > b)&&(a > c))
        cout << "Vitez behu je " << Mica.jmeno << endl;
    else if((b > a)&&(b > c))
        cout << "Vitez behu je " << Mica2.jmeno << endl;
    else if((c > a)&&(c > b))
        cout << "Vitez behu je " << Mica3.jmeno << endl;
    else
        cout << "Nejde urcit poradi" << endl;
}
#ifndef KOCKA_H
#define KOCKA_H

//kvuli string, vyhnuti se std::
#include <iostream>
using namespace std;

//trida
class Kocka
{
    public:
        //konstruktor
        Kocka(string jmeno,unsigned int vek,string barva_srsti);
        //destruktor
        ~Kocka();
        void pozdrav();
        int behej();
        void nabehano(Kocka Mica, Kocka Mica2, Kocka Mica3);
        string jmeno;
    //chranena
    protected:

    //soukroma
    private:
        unsigned int vek;
        string barva_srsti;
};
#endif // KOCKA_H

Ovsem neni mi zcela jasne proc se chova toto volani:

micka.nabehano(micka,micka2,micka3);

uplne stejne jak toto volani

micka2.nabehano(micka,micka2,micka3);

nebo toto

micka3.nabehano(micka,micka2,micka3);

Je v tom nejaky rozdil ? Mohl by mi to nekdo vysvetlit proc tomu tak je ? Ciste nabehano(micka,mic­ka2,micka3); nejde.

 
Nahoru Odpovědět 18.10.2014 14:39
Avatar
gcx11
Redaktor
Avatar
Odpovídá na davaj
gcx11:

Já myslel, že přidáš další atribut nabehano, jako máš například jmeno, barva srsti... A potom ve funkci běhej změníš hodnotu atributu nabehano. Následně hodnoty u jednotlivých koček porovnáš a vrátíš tu kočku s nejvyšší hodnotou tohio atributu.

Protože nabehano je metoda koček a všechny kočky mají tuto metodu stejnou. Navíc tam strkáš pořád stejné argumenty.

 
Nahoru Odpovědět 18.10.2014 15:59
Avatar
gcx11
Redaktor
Avatar
Odpovídá na davaj
gcx11:

Do konstruktoru kočky přidáš další atribut nabehano:

this->barva_srsti=barva_srsti;
this->jmeno=jmeno;
this->vek=vek;
this->nabehano=0; //nastavíš na nulu

Atribut přidáš do private:

unsigned int nabehano

A potom v metodě běhej přidáš změnu atributu:

nabehano = nabehano + i - 1

A potom jednotlivé hodnoty porovnáš v nějaké funkci.

 
Nahoru Odpovědět 18.10.2014 16:12
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.