Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Tulostusluokka ja siihen metodi

Sivun loppuun

kermiitti [26.01.2008 06:00:47]

#

Mitä tuo "metodi tulostusta varten tarkoittaa?"

Sinun tehtävänäsi on kirjoittaa luokka Tulostusluokka ja siihen metodi tulostusta varten

#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;                 <<<<< mitä tällä tivillä tehdään
  tulostaja.Tulosta(merkkijono);            <<<<< entä tällä rivillä
}

Esimerkkitulostus

Anna merkkijono, jonka tulostan:
esimerkkitulosteesi
merkkituloste

Materiaalin avulla joka minulla on en kyllä pääse yhtään eteenpäin...
Jotain tämän kalataista siihen varmaan pitäisi tulla mutta vielä olen niin hukassa, että en saa edes virhe ilmoitusta josta tietäisi, että edes pari riviä olisi oikein.

class Tulostusluokka;
{
public:
      void tulostaja();
};

void Tulostusluokka::tulostaja()
{
  cout << merkkijono;
}

Deffi [26.01.2008 09:19:21]

#

Tulostusluokka tulostaja;
tulostaja.Tulosta(merkkijono);

Ensimmäisellä rivillä luodaan luokkaan 'Tulostusluokka' olio nimeltä 'tulostaja'. Sen jälkeen kutsutaan tulostaja-olion 'Tulosta'-metodia (funktiota).

void Tulostusluokka::tulostaja()
{
    cout << merkkijono;
}

Tässä koodissa se vika varmaankin on. Tehtävässä on tarkoitettu tämän metodin nimeksi 'Tulosta', vaikka eipä tuolla paljoa merkitystä koodin toimivuuden kannalta. Itse vika on varmaankin se, että metodin olisi tarkoitus vaatia yksi char*-parametri, jonka se sitten tulostaisi ja se tuosta näyttäisi unohtuneen.

Ei viitsi kovin suoraa vastausta antaa koulutehtävään :P

kermiitti [26.01.2008 21:47:10]

#

Deffi kirjoitti:

void Tulostusluokka::tulostaja()
{
    cout << merkkijono;
}

Tässä koodissa se vika varmaankin on. Tehtävässä on tarkoitettu tämän metodin nimeksi 'Tulosta', vaikka eipä tuolla paljoa merkitystä koodin toimivuuden kannalta. Itse vika on varmaankin se, että metodin olisi tarkoitus vaatia yksi char*-parametri, jonka se sitten tulostaisi ja se tuosta näyttäisi unohtuneen.

 cout << "Anna merkkijono, jonka tulostan:";
cin.get(merkkijono, 50);

Eikö merkkijono kerätä tuossa muuttujaan merkkijono. Sitten vain tulosteta rivillä

void Tulostusluokka::tulostaja()
{
    cout << merkkijono;
}

Metabolix [26.01.2008 22:07:07]

#

Tutustupa Antin C-oppaan funktio-osioon, sama tieto koskee tuotakin tapausta, vaikka funktio onkin osa luokkaa.

Kuten jo sanottiin, koodista näkee, että kutsuttavan funktion nimi on Tulosta. Ainakin minulla tuo aiheuttaa nyt tällaisen virheen:
error: 'class Tulostusluokka' has no member named 'Tulosta'
Tuosta ei paljon selvemmäksi pääse: luokalla ei ole Tulosta-metodia, joten sellaista ei voi käyttää.

Koodista näkee myös, että Tulosta-funktiolle annetaan parametrina merkkijono eli char-taulukko. Funktiosta tuleekin tällainen:
void Tulosta(char taulukko[]);

Loput saat tehdä itse, voit tukeutua vaikka Antin C-oppaaseen. Merkillistä, että kurssilaiset eivät muka löydä kurssimateriaaleista tarpeellisia tietoja tehtävien ratkaisuun. Minusta se kertoo vain siitä, että materiaaleja ei jakseta lukea riittävän tarkasti ja ajatuksen kanssa (tai että tunnilla ei kuunnella kunnolla).

kermiitti [26.01.2008 23:16:20]

#

Metabolix kirjoitti:

Merkillistä, että kurssilaiset eivät muka löydä kurssimateriaaleista tarpeellisia tietoja tehtävien ratkaisuun. Minusta se kertoo vain siitä, että materiaaleja ei jakseta lukea riittävän tarkasti ja ajatuksen kanssa (tai että tunnilla ei kuunnella kunnolla).

Teen Viopen verkkokurssia jossa on semmoinen kayttoliittyma johon tehtavia
taytetaan ja kayttoliittyma sitten tarkistaa koodin ja muka opastaa eteenpain.

Kurssia teen ihan omaksi "ilokseni" yovuoroissa eika tod. ole nyt mahdollisuutta millaan luennoilla istua. Olisi kai aikanaan pitanyt.

Viopelle turha viikonloppuna mailia lahettaa ja neuvoa kysya niin kuormitan sitten tata keskustelupalstaa.

4:  class Tulostusluokka
5:  {
6:  public:
7:        char merkkijono[50];
8:        void Tulosta(char merkkijono);
9:         Tulostusluokka();
10:  };
11:
12:  void Tulostusluokka::Tulosta(char merkkijono[])
13:  {
14:    cout << merkkijono[];
15:  }

Ohje jonka saan on... Yrität määritellä jäsenfunktion, jota ei ole esitelty luokassa "Tulostusluokka". Olen tuohon publicin alle koittanut vaikka mita tarjota ja esitella vaan ei se hyvaksy.

Se c opas alkoi heti ahdistamaan, kun siella on printf sotkua %d ja %b ynna muuta moskaa..

Metabolix [26.01.2008 23:36:57]

#

kermiitti kirjoitti:

Teen Viopen verkkokurssia jossa on semmoinen kayttoliittyma johon tehtavia taytetaan ja kayttoliittyma sitten tarkistaa koodin ja muka opastaa eteenpain.

Ei tullut mieleen lukea niitä Viopen teoriaosioita? Kyllä siellä muistaakseni kerrotaan, vaikkei aivan selkeintä mahdollista tekstiä ollutkaan.

kermiitti kirjoitti:

Ohje jonka saan on... Yrität määritellä jäsenfunktion, jota ei ole esitelty luokassa "Tulostusluokka".

Huomaapa ero taulukon ja yhden charin välillä. Laita molemmissa Tulosta-kohdissa sulkuihin sama asia eli tuo jälkimmäinen vaihtoehto (char merkkijono[]). Merkkijonoa ei myöskään kuulu määritellä muuttujana luokassa.

Markus [26.01.2008 23:42:52]

#

Merkkijonoparametri on "const char *merkkijono" eikä "char merkkijono[]".
Ja sen tulostus: "cout << merkkijono;"

Antti Laaksonen [26.01.2008 23:45:54]

#

Mikä tuo public-osan päättävä Tulostusluokka-määrittely on? Se rivi joutaa kenties pois.

Metabolix [26.01.2008 23:54:45]

#

Markus kirjoitti:

Merkkijonoparametri on "const char *merkkijono" eikä "char merkkijono[]".

Kieltämättä const olisi paikallaan (vaikkei koodin syntaksin oikeellisuuteen vaikutakaan), mutta mikään ei edellytä osoitinmerkintää, taulukkomerkintä käy aivan hyvin.

Antti Laaksonen kirjoitti:

Mikä tuo public-osan päättävä Tulostusluokka-määrittely on? Se rivi joutaa kenties pois.

Sitä kutsutaan muodostimeksi (tai konstruktoriksi), se on eräänlainen funktio sekin. Joutaa toki tuosta koodista pois, kun ei sellaista tarvita.


Sivun alkuun

Vastaus

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

Tietoa sivustosta