Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Oliot

Sivun loppuun

Tumpelo [11.12.2005 20:06:32]

#

Voisko joku vähän havainnollistaa noiden olioiden käyttöä, oppaissa ne on selitetty vähän sekavasti. Eli mun pitäs saaha seuraavanlainen juttu aikaan:

Cars.Audi80.Acceleration

Eli Cars. jälkeen tulee auto, jonka tietoja halutaan käyttää ja sen jälkeen auton haluttu tieto, kuten vaikkapa kiihtyvyys tai ajettavuus.

Ja vielä semmonen että voiko tuossa "Audi80":n paikalla käyttää muuttujaa? Eli näin:

String CarSelect;
CarSelect = "Audi80";
Cars.CarSelect.Acceleration = 78;

Neuvokaa nyyppää. :D

Zach [11.12.2005 20:23:34]

#

Olioiden käyttäminen noin ei ole oikein järkevää. Tuossa Cars-luokalla pitäisi olla jäseninä kaikki tarvittavat autot, eikä luokan muokkaus jälkeenpäin ole helppoa. Kannattaa sen sijaan määritellä luokka Car, joka sisältää yksittäisen auton ominaisuudet. Sitten itse ohjelmassa luot Car-taulukon, joka sisältää yhtä monta Car-alkiota kuin autoja tarvitaan. Tiettyyn autoon viitataan esim. cars[0].Acceleration...Jos haluat välttämättä valita auton nimen, etkä indeksin perusteella, voi tehdä jonkinlaisen hakufunktion, joka käy jokaisen auton nimen läpi, kunnes haluttu löytyy.

Tumpelo [11.12.2005 20:32:02]

#

Voisitko laittaa vähän selventävää esimerkkikoodia?

Metabolix [11.12.2005 20:37:54]

#

Katsele haulla ja oppaista ensin. Myös tämä Zmyrgelin aihe viimeisen parin viikon ajalta on ihan hyvä lähde, siellä on tullut näitä väänneltyä jo aika perusteellisesti. STL (Standard Template Library) on aika kova sana myöskin.

Zach [11.12.2005 20:43:04]

#

class Car
{
  private:
   int Acceleration; jne.
  public:
   SetAcceleration(int a) {Acceleration = a};
};

int main()
{
  Car cars[5];

  cars[0].SetAcceleration(78);
  jne.
  return 0;
}

Tumpelo [11.12.2005 21:02:02]

#

Hmm, erroreita pukkaa niin että hirvittää. :S Vaatiiko tuo jonkin tiedoston sisällyttämistä? Tällä hetkellä on sisällytettynä:

#include <cstdlib>
#include <iostream>
#include <time.h>
#include <stdlib.h>
#include <ctime>
#include <string>

Metabolix [11.12.2005 23:02:12]

#

Varmaan fiksusti jätit nuo jne:t tuonne? Ja niin edelleen :)
Suosittelen yhä vaihtoehtoa C++-opas.

Zach [11.12.2005 23:24:47]

#

Pari typoa pääsi tulemaan: SetAcceleration void-tyyppiseksi ja puolipisteen ja aaltosulun paikka toisinpäin. Vielähän tuo ei varsinaisesti tee mitään.

class Car
{
  private:
   int Acceleration;
  public:
   void SetAcceleration(int a) {Acceleration = a;}
};

int main()
{
  Car cars[5];

  cars[0].SetAcceleration(78);

  return 0;
}

Metabolix [11.12.2005 23:25:53]

#

Itse asiassa puolipiste sekä ennen että jälkeen kyseistä aaltosulkua.

Zach [11.12.2005 23:37:03]

#

Kyllä "oikean" syntaksin mukaista taitaa olla puolipiste inlinefunktiossa vain aaltosulkua ennen; molemmin puolin olevat sulutkin tuntuvat toimivan. Pakko turvautua ylempään auktoriteettiin: ;D
http://www.intap.net/~drw/cpp/cpp07_05.htm

Metabolix [12.12.2005 00:41:44]

#

Näköjään sitten niin. Taas kerran Microsoft on katsonut hyväksi kohdella C++:n syntaksia väkivalloin. GCC:llä tuo tosiaan toimiikin.

Isommissa (ja miksei pienemmissäkin) luokissa on joka tapauksessa parasta laittaa funktiot ihan omaan tiedostoonsa. Helpompi lukeakin, kun itse koodi on jossakin muualla kuin esittelyn seassa.

Tumpelo [14.12.2005 17:48:11]

#

On se ny prkl ku ei ala toimimaan, oon kaikki maholliset neuvot ja koodit ja kaiken käyny läpi mutta aina vaan Dev-C++ keksii jotaki valittamista...

Taidan vaihtaa alaa...

Zach [15.12.2005 21:41:59]

#

Hankala auttaa, kun ei tiedä mitä auttaa...Millaisia virheilmoituksia tulee?

Tzaeru [15.12.2005 23:40:32]

#

Etköhän tämän sitten jo ymmärrä ;-)
Devin fontti muuten tekee kivan näköisiä hymiöitä :)

#include <iostream>                  // Includetaan iostream

using namespace std;                 // Lisätään nimiavaruus std käyttöön, jotta ei tarvi sitä tunkea kaikkialle erikseen..

class Car                            // Tässä on luokka Car
{
      private:                       // Nämä näkyvät vain luokalle ja sen jäsenille
      int nopeus;                    // Tämä on muuttuja nopeus, jota tarvitaan möyhemmin
      int matka;                     // Tämä on muuttuja matka, jota tarvitaan möyhemmin
      public:                        // Nämä jutut näkyvät kaikille jutskille ohjelmassa.
      void autonmatka(int);          // Esitellään meidän metodi (ajattele tätä vaikka luokan aliohjelmana, orjana joka tekee kaiken työn
};

void Car::autonmatka(int aika)       //Meirä metodi
{
     nopeus = 20;                   // Alustetaan muuttuja nopeus
     matka = aika * nopeus;         //Kerrotaan aika nopeudella, jolloin saadaan tietää matka
     cout<<matka<<" m/s";           // Tulostetaan matka
}

int main()
{
    Car car;                        // Luodaan olio meirä luokalle. Ajattele tätä vaikka ikäänkuin olion esittelynä, jos ei muuten mene perille ;-)
    int aika;                       // Tässä luodaan muuttuja aika
    cout<<"Kerro automobiilin aika sekunteina, ja saat tietää kuljetun matkan!!\n";
    cin>>aika;                      //Tässä käyttäjä saa yrittää typ0ttaa ajalle jonkinsortin arvon
    car.autonmatka(aika);           //Tässä kutsutaan olion aliohjelmaa
    cin>>aika;                      //Tämä on tässä vain     pitämään ohjelma käynnissä, jottei se vain välähdä
    return 0;
}

Toivottavasti sisennykset näkyy.
Okei, tuon koodin toivottavasti ymmärrät. Yritin ainakin tehdä sen selkeästi :-)
Pointtina on siis laskea auton matka käyttäjän antaman ajan perusteella ja valmiin nopeusvakion kanssa.

Siinä on sitä sun tätä tehty vähän kömpelösti, mutta ainakin olettaisin että se on helppolukuinen sekä mahdollisimman yksinkertainen. Asioita on yksinkertaistettu niin paljon kuin vain voi. Ja ainakin se on standardia.. Luulisin

Siinä on se olio jossa on.. Noh, kai siinä on riittävästi kommelluksia? (kommentointeja :oo )


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta