Keskustelut - C/C++ - Aloittelijan ongelma Luokissa (Privaatti muuttuja)


Jaskor88 20:18 2.7.12 
Hei,

olisi tällainen ongelma harjoitustehtävässä:

Edellisessä tehtävässä sinun vastuulla oli toteuttaa luokka, jonka
palveluiden avulla alkeellinen pankkiohjelma toimi. Nyt tehtävänäsi on
toteuttaa pieni osa "Asiakastili" luokkaa hyödyntävästä pääohjelmasta,
joka kokonaisuudessaan muodostaa pankkiohjelman logiikan ja toiminnan.

Tehtävänäsi on kirjoittaa ohjelmanpätkä, joka liitetään osaksi koko pankkiohjelmaa. Sinun ohjelman osan tulee selvittää, löytyykö köytössäsi olevasta oliotaulukosta oliota eli asiakasta, jolla on sama tilinumero kuin ohjelmalle juuri syötetty tilinumero. Jos oliotaulukko (asiakasrekisteri[5]) sisältää asiakkaan, jolla on sama numero, tulee ohjelman osasi asettaa bool-muuttujalle "loytyi" arvo "true", sekä kutsua täsmäävän olion jäsenfunktiota "NaytaTiedot()".

Seuraavassa huomioita tehtävän ratkaisemiseksi:


Tilinumero, jota haetaan oliotaulukon olioista sijaitsee muuttujassa "tilin_nro".

Oliot, joiden seasta etsitään täsmäävää tilinumeroa on nimeltään "asiakasrekisteri" ja se sisältää viisi oliota (asiakasrekisteri[0]-->asiakasrekisteri[4]).

Tehokkaimmin täsmäävän tilinumeron etsiminen onnistuu silmukassa. Silmukan ehto-osassa on mahdollista määritellä erityinen indeksimuuttuja, esim: for(int indeksi; ....

Olioiden funktioihin viitataan pistenotaatiolla.

Ohjelman tulee vain ja ainoastaan verrata olemassa olevaa tilinumeroa olioiden tilinumeroihin ja jos saman tilinumeron omaava olio löytyy, asettaa "loytyi", sekä kutsua
"NaytaTiedot" funktiota. Muut toiminnallisuudet ovat turhia ja estävät mahdollisesti tehtävän hyväksytyn suorittamisen.


Tälläsen sain aikaiseksi ja en oikeen ymmärrä mitä teen väärin, kun tosta .tilin_nro herjataan että se on privaatti. Olisiko jollain jotain vinkkiä antaa? Kiitos :)

PHP
int i, tili;
tili = tilin_nro;

        for (i=0; i<5; i++){
                if (asiakasrekisteri[i].tilin_nro==tili){
                        loytyi = true;
                        asiakasrekisteri[i].NaytaTiedot();
                        }
                else{
                cout << "Antamaasi tilinumeroa ei löytynyt." << endl;
                }
        }
 

editoitu: 23:03 2.7.12
Grez 23:02 2.7.12 
Et tietenkään voi lukea toisen olion privaattimuuttujan arvoa toisesta oliosta. Jos et määrittele muuttujalle näkyvyyttä, niin se on oletuksena privaatti.

Edit: Sanalla tietenkään siis tarkoitin, että eihän siinä muuten olisi mitään järkeä pystyä määrittämään muuttujan näkyvyyttä, jos yksityisetkin olisi julkisia.
editoitu: 13:47 3.7.12
Jaskor88 01:34 3.7.12 
No nyt sain siitä tällaisen, mutta ei tämäkään kyllä toimi :P


C++

int i, tili;
tili = tilin_nro;

        for (i=0; i<5; i++)
                       
                        {
       
                        loytyi = Asiakastili.VertaaTiliNro(tili);
                       
                        if (loytyi == true)
                        asiakasrekisteri[i].NaytaTiedot();
                       
                        else
                        cout << "Antamaasi tilinumeroa ei löytynyt." << endl;
                       
                        }

 


error: expected primary-expression before ‘.’ token kohdan "loytyi = Asiakastili.VertaaTiliNro(tili);" jälkeen, mitä tämä nyt sitten mahtaa meinata?
weicco 14:42 3.7.12 
Sinulla ei ole muuttujaa nimeltä Asiakastili johon yrität viitata. Sinun pitää luoda moinen instanssi jostain luokasta.

Grez, etkö tiedä sanonta "In C++ your friends can see your privates" ;)
editoitu: 17:21 3.7.12
Jaskor88 17:19 3.7.12 

C++

int i, tili;   
Asiakastili a;

        for (i=0; i<5; i++)
               
                {
       
                        if (a.VertaaTiliNro(tilin_nro)==1)
                        {
                        loytyi = true;
                        asiakasrekisteri[i].NaytaTiedot();
                        }
                       
                        else
                        {
                        continue;
                        }
                       
                }

 


Näin se kyllä kääntyy, mutta tulos ei ole oikea. Esimerkkitulostuksen mukaan pitäisi tulla:

2: Muuta asiakkaan saldoa.
Lopetus negatiivisella luvulla.
Valitse toiminto: 1
Anna tilinumero:
12345
Tilinumero: 12345
Asiakaan nimi: Mikko Möttönen
Tilin saldo: 312

Mutta sen sijaan tulee.

1: Näytä asiakkaan tiedot.
2: Muuta asiakkaan saldoa.
Lopetus negatiivisella luvulla.
Valitse toiminto: 1
Anna tilinumero:
12345
Antamaasi tilinumeroa ei löytynyt.

Eli onko tuossa a.VertaaTiliNro kohdassa nyt vikaa vai eikö se saa tuota tilin_nro annettua sille metodille? Tai sitten olen ihan hakoteillä muutenkin.
editoitu: 14:17 4.7.12
Jaskor88 14:17 4.7.12 
Miksi minusta alkaa tuntumaan, että koko tehtävä on mahdoton annetuilla ohjeilla? Väärää vastausta ei voi palauttaa ja ennen kuin oikean palauttaa ei pääse eteenpäin lainkaan. Olisi kiva saada jotain jelppiä.

Luokka Asiakastili:


C++

class Asiakastili
{
  int tilin_nro;
  int tilin_saldo;
  string asiakkaan_nimi;
 
public:
  void LisaaAsiakas(int nro, int saldo, string nimi);
  void NaytaTiedot();
  void MuutaSaldoa(int saldo);
  int VertaaTiliNro(int nro);
};
 
void Asiakastili::LisaaAsiakas(int nro, int saldo, string nimi)
{
  tilin_nro = nro;
  tilin_saldo = saldo;
  asiakkaan_nimi = nimi;
}
 
void Asiakastili::NaytaTiedot()
{
  cout << "Tilinumero: " << tilin_nro << endl;
  cout << "Asiakkaan nimi: " << asiakkaan_nimi << endl;
  cout << "Tilin saldo: " << tilin_saldo << endl;
}
 
void Asiakastili::MuutaSaldoa(int saldo)
{
  tilin_saldo = saldo;
}
 
int Asiakastili::VertaaTiliNro(int nro)
{
  if(tilin_nro == nro)
  {
    return 1;
  }
  else
  {
    return 0;
  }
}

 


Kiitos jos joku viitsii auttaa :)
Jaskor88 16:22 4.7.12 
Sainpas toimimaan juotuani ison kupillisen kahvia ja raavittuani pääni puhki. :D Eikä tämä ollut edes niin vaikea lopuksi -.- En vaan oikein oivaltanut tuon oliotaulukon toimintaa.