Mi lehet a hiba? C++
Most gyakorlom az objektum orientált programozást de nagyon nehéz.
Ezt amit most próbálok megcsinálni azt már megcsináltam nem OO.
De így nem megy :(
Segítsetek.
//main.cpp
# include <iostream>
using std::cout;
using std::cin;
using std::endl;
typedef unsigned short ushort;
class SIM
{
public:
SIM();
~SIM();
void Bead();
ushort Vizsgal(ushort bead1);
void szamlalo();
private:
enum SIMKARD {PIN = 1234,PUKK = 2345,PUKK2 = 3456};
ushort *bead;
ushort *szamlalo;
};
SIM::SIM()
{
bead = new ushort(0);
szamlalo = new ushort(3);
}
SIM::~SIM()
{
delete bead;
delete szamlalo;
}
void SIM::Bead()
{
cout <<"Add meg a pin kodot: " cin >> *bead;
Vizsgal(*bead);
}
ushort SIM::Vizsgal(ushort *bead1)
{
do
{
if(*bead1 == PIN)
{
cout <<"Pin kod-jo \n";
}
else
{
szamlalo();
}
}while(*szamlalo > 0);
}
void SIM::szamlalo()
{
*szamlalo-=1;
cout <<"Pin-kod rossz meg "<< *szamlalo <<" lehetoseged van \n";
Bead();
}
int main()
{
SIM *simcard = new SIM;
simcard->Bead();
delete simcard;
cin.get();
return 0;
}
Nem értem az OO programozást pedig nem OO olyan jól megy :D
Magyarázzátok el,ha el lehet .
Az volna a legjobb ha valaki megírná nekem.Mert így át tanulmányozom és idővel megértem.
Meg az OO programozás folyamatát elmagyarázni
mert ez tiszta más ahogy én megszoktam.
7:21 hozzászólásomhoz hozzátenném:
class SIM
{
public:
SIM();
~SIM();
void Bead();
ushort Vizsgal(ushort *bead1); //javítva
void szamlalo();
private:
enum SIMKARD {PIN = 1234,PUKK = 2345,PUKK2 = 3456};
ushort *bead;
ushort *szamlalo;
};
Ezt szeretném megvalósítani csak OO.
Az állandó az maradjon nevesített.
És külön függvényt mindenre.De nemtudom megcsinálni ezt OO. :( Segítsetek jó köszi.
//main.cpp
# include <iostream>
# include <windows.h>
using std::cout;
using std::cin;
using std::endl;
typedef unsigned short ushort;
int main()
{
enum SIMCARD {PIN = 1234,PUKK = 2345,PUKK2 = 3456};
ushort bead = 0;
short szamlalo = 3;
do
{
cout <<"Add meg a PIN-kodot: "; cin >> bead;
if(bead == PIN) {cout <<"PIN-kod jo \n";szamlalo = -1;}
else
{
szamlalo--;
cout <<"PIN-kod rossz";
if(szamlalo > 0)
{cout <<" meg "<< szamlalo <<" lehetoseged van. \n";}
}
while(szamlalo == 0)
{
cout <<" add meg a PUKK-kodot: "; cin >> bead;
if(bead == PUKK)
{
cout <<"PUKK-kod jo ";
szamlalo++;
}
else
{
cout <<"PUKK-kod rossz add meg a PUKK2-kodot: "; cin >> bead;
if(bead == PUKK2)
{
cout <<"PUKK2-kod jo";
}
else
{
cout <<"PUKK2-kod rossz SIM-card zarolva! \n"
<<"KILEPES.";
Sleep(500);cout <<".";
Sleep(500);cout <<".";
Sleep(500);cout <<".";
Sleep(500);cout <<".";
Sleep(500);cout <<".";
Sleep(500);cout <<".";
Sleep(500);cout <<".";
exit(0);
}
}
}
}while(szamlalo > 0);
Sleep(1500);
exit(0);
cin.get();
return 0;
}
Hiba? hibák...
első probléma a szamlalo és a szamlalo() ,nem lehet ugyanaz a neve egy függvénynek és egy változónak. Vizsgal() miért ushort típusú? akkor egy ushorttal kellene isszatérnie,simán void. a Vizsgal()-on belül,ha jó a PIN kód végtelen ciklus,mert a szamlalo > 0 teljesül. Ha egy pointert adsz át a Vizsgal()-nak akkor az referenciát várjon (ushort&). Ha elfogytak a próbálkozási lehetőségek,akkor még mindig nem jó,mert miután 0 lett a szamlalo még eghívja a bead-ot. Továbbá a Bead meghívja a Vizsgal()-t... Akkor a DO ág mindg lefut,és csak utána vizsgálja a ciklusfeltételt. így az fölösleges. A számlálót dinamikusan lefoglalni szintén az,simán mehet int.
Nagyjaból kijavítottam,hogy működő legyen,de azért pofozgasd még át. Továbbá a konstruktor használata. Ha egyetlen művelet úgymond végigviszi az osztály összes lehetőségét akkor és másra funkcionálisan nem képes az osztály,akkor hívja meg azt a műveletet a konstruktor. Objetumorientált szemléletódon pedig nem így kellene felépíteni. A valóság egy absztrakt modelljét készítjük el. Ezek alapján kellene lennie egy telefonnak. A telefon kéri be a PIN kódot,és egyezteti,hogy a SIM-kártya PIN kódjával egyezik-e. Továbbá a telefon zárolja 3 próbálkozás utána sim-et. A Konstruktor pedig az osztály műveleteinek egy olyan legszűkebb halmaza,ami a az osztály adathalmazás képes felépíteni(konstruálni).
Tehát helysen ez úgy nézne ki,hogy van egy Telefon class, a telefon képe Beolvas() -ni , szamol-ni a lehetőségeket, és összeegyeztetni a SIM class adattagjaival. Itt a kijavított kódod:
# include <iostream>
using std::cout;
using std::cin;
using std::endl;
typedef unsigned short ushort;
class SIM
{
public:
SIM();
~SIM();
void Bead();
void Vizsgal();
void Szamlalo();
private:
enum SIMKARD {PIN = 1234,PUKK = 2345,PUKK2 = 3456};
ushort *bead;
int szamlalo;
bool finish;
};
SIM::SIM()
{
bead = new ushort(0);
szamlalo = 3;
Bead();
finish = false;
}
SIM::~SIM()
{
delete bead;
}
void SIM::Bead()
{
cout <<"Add meg a pin kodot: " ;
cin >> *bead;
Vizsgal();
}
void SIM::Vizsgal()
{
if(szamlalo > 0){
if(*bead == PIN)
cout <<"Pin kod-jo \n";
else
{
Szamlalo();
}
}
else{cout << "Nincs tobb lehetoseg";}
}
void SIM::Szamlalo()
{
szamlalo--;
cout <<"Pin-kod rossz meg "<< szamlalo <<" lehetoseged van \n";
Bead();
}
int main()
{
SIM *simcard = new SIM();
delete simcard;
cin.get();
return 0;
}
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!