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
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.
Voisitko laittaa vähän selventävää esimerkkikoodia?
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.
class Car { private: int Acceleration; jne. public: SetAcceleration(int a) {Acceleration = a}; }; int main() { Car cars[5]; cars[0].SetAcceleration(78); jne. return 0; }
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>
Varmaan fiksusti jätit nuo jne:t tuonne? Ja niin edelleen :)
Suosittelen yhä vaihtoehtoa C++-opas.
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; }
Itse asiassa puolipiste sekä ennen että jälkeen kyseistä aaltosulkua.
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
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.
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...
Hankala auttaa, kun ei tiedä mitä auttaa...Millaisia virheilmoituksia tulee?
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 )
Aihe on jo aika vanha, joten et voi enää vastata siihen.