[C++] Benutzerdefinierte Klasse... und Problem beim benutzen dieser...

code bug

code bug

Mitglied
Thread Starter
Dabei seit
27.04.2011
Beiträge
78
Reaktionspunkte
1
Hallo.
Ich habe angefangen eine Art "Banking Programm" zu schreiben(natürlich nicht für den allgemeinen Gebrauch. Nur aus Spaß). Nun ist das erste Problem, dass ich pro Konto eine neue Instanz der Klasse erstellen will. Nun muss aber im Code angegeben werden wie die Instanz heißt. Wenn ich also ein Konto erstellen will geht das nicht, da ich nicht für jeden "User" in Code kann und eine neue Instanz manuell erstellen kann :)

Gibt es ein Weg es zu realisieren, dass der User einen Namen eingibt, der dann ALS "Name" der Instanz benutz wird. Damit das Prog quasi dynamisch wird?

cb
 
Ich bin mehr in Objective-C und C drin als in C++, aber normalerweise würdest du dir wohl ein Array machen mit allen Konti und ein Attribut des Konto-Objekts wäre dann halt ein Unique Identifier. Die Instanzen müssen dann keinen "Namen" in dem Sinne mehr haben (technisch sind das ja sowieso nur Namen von Variablen die auf das Objekt zeigen). Wenn du die Instanz erstellst nimmst du einfach eine temporäre Variable zum Erstellen. Ich hoffe ich konnte das einigermassen verständlich erklären. ;)
 
Aber in einem Array müsste ich definieren wie viele Accounts registriert werden, wenn ich dich richtig verstanden habe :)
Oder meintest du, dass ich das in die Klasse integriere?
 
Okay, ich glaube ich weiß worauf du heraus willst.
Ich dachte mir hiernach den Code ungefähr so:

int max = ...;

int accounts;

string name[max];
double balance[max];
usw...

if (accounts >= max) {
---Vergrößern---
}

und die Feld Nummer der Arrays dann quasi die "Kontonummer" ist...? :)

Bezüglich der Objekte (dein Link) weiß ich aber keinen Weg, wie ich sie in den Code einbauen soll :(
 
Code:
class account {
    
    public:
    
    string firstName;
    string secondName;
    int age;
    double balance;
    bool acception;
    double tmp;
    int pin;
    
    void changeName();
    void changeAge();
    void blockAccount();
    void addMoney();
    void subtractMoney();
    void setUnknown();
};


void account::changeName() {
    
    cout << "Enter first and second Name afterwards: ";
    cin >> firstName >> secondName;

    
}

void account::changeAge() {
    
    cout << "Please enter Age: ";
    cin >> age;
}

void account::blockAccount() {
    
    cout << "Really Block(1 = Yes 0 = No)?" << endl;
    cin >> tmp;
    
    if (tmp==1) {
        acception = false;
    }
}

void account::addMoney() {
    cout << "Enter your Pin(4 Numbers): ";
    cin >> tmp;
    if (tmp==pin) {
        cout << "How much Money should be added: ";
        cin >> tmp;
        balance += tmp;
    }
}

void account::subtractMoney() {
    
    cout << "Enter your Pin(4 Numbers): ";
    cin >> tmp;
    if (tmp==pin) {
        cout << "How much Money should be added: ";
        cin >> tmp;
        balance -= tmp;
    }

}

void account::setUnknown() {
    
    firstName = "(Empty)";
    secondName = "(Empty)";
    age = 0;
    balance = 0;
    acception = false;
    pin = 0000;
}

Hier ist mein Code mit der bisherigen Klasse
 
Statt dem händischen Arbeiten mit Arrays, empfehle ich die STL zu benutzen, die bietet für viele Probleme, die immer wieder auftauchen relativ anständige Lösungen - u.a. auch für Container :) Wieso das Rad zweimal erfinden?

http://www.cplusplus.com/reference/stl/

Also z.B. die Konten als

std::vector< Account >

speichern, wobei der index der Kontonummer entspricht, oder eine Map nehmen

std::map< Account::id_type, Account >

Wobei Account::id_type noch entsprechend gewählt werden muss.
Für die Map brauchst Du noch einen Vergleichsoperator auf Deinem Account-Objekt, ist also nicht ganz so trivial wie der Vector, dafür aber mächtiger.

Hilft das?
 
Ich verstehe dein Problem nicht so richtig.
Aber eine Instanz dynamisch im Programm anlegen geht natürlich.
Wenn der Name und/oder Vorname dazu dient das Konto zu identifizieren, sollte doch folgendes funktionieren:

account *newAccount = new account();
newAccount->changeName();

Die Instanzen der Account-Klasse könnten bspw. in einer Liste oder einer Map verwaltet werden. Um nicht alles selbst zu machen, würde ich mir mal die STL Template-Klassen ansehen.
 
Zuletzt bearbeitet:
Zurück
Oben Unten