[C++] Korzystanie ze zmiennych prywatnych
Ostatnio zmodyfikowano 2014-02-17 19:40
Highlander Temat założony przez niniejszego użytkownika |
[C++] Korzystanie ze zmiennych prywatnych » 2014-02-17 16:23:05 Witam, próbuje skorzystać ze zmiennej prywatnej "int pinKlient" z klasy Klient w klasie KartaBankomatowa, lecz wywali mi błąd, że zmienna ta nie jest zadeklarowana w klasie KartaBankomatowa, mimo, iż je zaprzyjaźniłem, próbowałem różnych wskazówek i tematów lecz nie mogę sobie z tym poradzić. Proszę o pomoc. #include <iostream> #include <cstdlib> #include <cmath> #include <ctime> using namespace std;
class Klient { friend class KartaBankomatowa; private: double ileWybiera; int pinKlient = 1111; public: Klient( double _ileWybiera, int _pinKlient ) { ileWybiera = _ileWybiera; pinKlient = 1111; } }; class KartaBankomatowa { private: string rodzajKarta; long long int numerKarta; int pinKarta = 0; double stanKonto; public: void wpiszPin() { cin >> pinKarta; } KartaBankomatowa( string _rodzajKarta, long long int _numerKarta, double _stanKonto ) { rodzajKarta = _rodzajKarta; numerKarta = _numerKarta; stanKonto = _stanKonto; pinKarta; } void pokazKarta() { cout << rodzajKarta << endl; cout << numerKarta << endl; cout << stanKonto << endl; if( pinKarta == pinKlient ) cout << pinKarta << endl; else cout << "Nieprawidlowy PIN" << endl; } };
|
|
Adik80 |
» 2014-02-17 17:52:58 pinKlienta powinien byc wywolany na rzecz obiektu typu Klient, inaczej kompilator uzna ze chcesz uzyc zmiennej z klasy Karta. Najprosciej, jesli chesz zweryfikowac Karte, przekaz do funkcji referencje do klasy Klient: void pokazKarta( const Klient & kli ) { if( pinKarta == kli.pinKlient ) ... } |
|
Highlander Temat założony przez niniejszego użytkownika |
» 2014-02-17 18:51:37 Rozumiem, wiele mi pomogłeś bo przy okazji zaczynam kumać do czego może służyć referencja. Mam dalej pytania. Jak w main, po tej modyfikacji kodu wywołuje obiekt, to jak ma to wyglądać ? u mnie jest to tak: int main() { KartaBankomatowa k1( "Visa", 872347234234, 3650 ); k1.wpiszPin(); k1.pokazKarta(); return 0; }
wywala bład "no matching function..." przy k1.pokazKarta(); I drugie pytanie, czy jest możliwość zrobienia tego tak jak ja miałem na początku w zamyśle ? czyli po prostu bezpośrednio użyć tej zmiennej z klasy Klient w klasie KartaBankomatowa poprzez zaprzyjaźnienie ich? Dziękuje i pozdrawiam |
|
Adik80 |
» 2014-02-17 19:02:00 Moze jakos tak: Klient klient( 1, 1234 ); KartaBankomatowa k1( "Visa", 872347234234, 3650 ); kl.pokazKarta( klient );
|
|
alixir |
» 2014-02-17 19:40:48 Jeśli nie chcesz deklarować pierwszej klasy w funkcji main(), bądź nie chcesz przekazywać jej jako argument funkcji, możesz to zrobić to np. tak: (oczywiście to będzie działało tylko dla obiektu cKlient, a chyba nie o to ci chodzi) #include <iostream>
class Klient { private: int pinKlient; public: Klient() { pinKlient = 1010; } Klient( int nr_pin ) { pinKlient = nr_pin; } friend class KartaBankomatowa; } cKlient;
class KartaBankomatowa { private: int pinKarta; public: KartaBankomatowa() { pinKarta = 2020; } KartaBankomatowa( int nr_pin ) { pinKarta = nr_pin; } void pokazKarta() { if( cKlient.pinKlient == pinKarta ) std::cout << "Pin OK" << std::endl; else std::cout << "Nieprawidlowy PIN" << std::endl; } };
int main() { KartaBankomatowa nowa_karta( 1020 ); nowa_karta.pokazKarta(); return 0; } |
|
« 1 » |