En tiedä mikä seuraavassa on vialla, voiko joku auttaa. Tässä tehtävä:
Tehtävä kirjoitti:
Alla oleva ohjelma luo luokkaan Tulostusluokka pohjautuvan olion nimeltään tulostaja ja käyttää sen jälkeen tuota oliota tekstin tulostamiseen.
Sinun tehtävänäsi on kirjoittaa luokka Tulostusluokka ja siihen metodi tulostusta varten (alla olevaa koodia ei siis tarvitse kopioida palautuskenttään).
#include <iostream> #include <string> using namespace std; // sinun koodisi tulee tähän int main() { char merkkijono[50]; cout << "Anna merkkijono, jonka tulostan:"; cin.get(merkkijono, 50); Tulostusluokka tulostaja; tulostaja.Tulosta(merkkijono); }Esimerkkitulostus
Anna merkkijono, jonka tulostan:esimerkkituloste esimerkkituloste
Olen saanut väännettyä tälläisen:
class Tulostusluokka { public: char merkkijono[50]; void Tulosta(char merkkijono[]); void Tulostusluokka::Tulosta(char merkkijono[]) cout << merkkijono << endl; }
Mod. korjasi kaikenlaiset muotoilut!
Eikö olisi parempi käyttää c++:n string-tietotyyppiä, kun se kerta includetetaan koodiin. Tulostusluokka::Tulosta määrittelee luokkaasi metodin, mutta se pitäisi silloin tehdä luokan ulkopuolella. Koodista puuttuu muutenkin aaltosulkuja.
cout << merkkijono << endl;
tuo ei ole nyt milläänlailla metodissa, joten ei varmasti toimi. Näin toimii:
#include <iostream> #include <string> using namespace std; class Tulostusluokka { public: void Tulosta(string tulostettava){ cout << tulostettava << endl; } }; int main(){ string merkkijono; cout << "Anna merkkijono:"; getline(cin, merkkijono); Tulostusluokka tulostaja; tulostaja.Tulosta(merkkijono); }
EDIT: Lisätty selityksiä, miksei koodi toimi
Tai sitten käyttämällä selityksessäsi esiteltyä main funktiota:
class Tulostusluokka { public: void Tulosta(char* tulostettava){ cout << tulostettava << endl; } };
Kiitos Ripe, tää koko Olio-juttu menee mulle vielä yli ymmärryksen. Ehkä on parempi lukea lisää jos jostain löytyisi hyvää materiaalia.
kayttaja-12009 kirjoitti:
Kiitos Ripe, tää koko Olio-juttu menee mulle vielä yli ymmärryksen.
Ei haittaa yhtään, jos tuo esimerkki menee yli tai ohi. Se on todella huono. Siinä tehdään yksinkertaisen asia monimutkaisella tavalla pelkästään siksi, että saadaan väkisin tungettua luokka johonkin väliin. :(
Oliot ovat itse asiassa aika helppo ymmärtää, tosin olen itsekin ohjelmoinut vasta pari vuotta. Kun osaa ohjelmoida yhdellä kielellä, osaa yleensä muidenkin kielien perusasiat, sillä ne ovat melko samanlaisia kaikissa kielissä. Mielestäni oliot ovat todella hyödyllisiä, sillä niiden avulla voi tavallaan paketoida koodia ja saada sitä parempaan järjestykseen. Onnea vaan opiskeluun
Suosittelen että opettelet ensin helposti tajuttavan tietueen vaikka täältä.
Sitten vain lisäät funktiota tietueen sisään tähän tyyliin ja hoplaa, osaat olio-ohjelmointia!
Toki olio-ohjelmointiin kuuluu paljon muutakin, mutta tuo on ensimmäinen askel ja nähdäkseni paras tapa ymmärtää oliohomma.
Luokka tosiaan kannattaa hahmottaa (C-kielen) tietueena, jota on laajennettu funktioilla. Ei se OO:n perusidea sen monimutkaisempi ole.
Kiitos vastauksista ja linkeistä. Näillä pitäis päästä jo jyville, ehkä parempi jos vain kokeilen ohjelmoida vapaa-ajalla kans. Tajuan ettei ohjelmointia välttämättä ymmärrä niin hyvin pelkästään lukemalla (ainakaan omalla kohdallani), tekemällä oppii paljon paremmin.
Aihe on jo aika vanha, joten et voi enää vastata siihen.