2017-01-05 29 views
0

Ich möchte ein bestimmtes Objekt in einer Klasse in C++ bekommen. Ich habe mehrere Seiten betrachtet und es scheint, dass meine Frage einzigartig ist. Okay, hier ist mein Code.C++ Wie bekomme ich ein spezifisches Objekt in einer Klasse

In House.h

#include <string> 
using namespace std; 
class House 
{ 
    string Name; 
    int Health; 
public: 
    House(string a, int h); 
    void GetHouseStats(); 
    void DamageHouse(int d); 
    ~House(); 
}; 

in House.cpp

#include "House.h" 
#include <iostream> 

House::House(string a, int h) 
{ 
    Name = a; 
    Health = h; 
} 
void House::DamageHouse(int d) { 
Health -= d; 
cout << "Your " << Name << " has " << Health << " left."<<endl; 
} 
void House::GetHouseStats() { 
    cout << Name<<endl; 
    cout << Health; 
} 
House::~House() 
{ 
} 

in Source.cpp

#include <iostream> 
#include "House.h" 
using namespace std; 

int main() 
{ 
    House Kubo("Bahay Kubo", 2); 
    Kubo.DamageHouse(1); 

} 

Ich habe Haus Kubo als mein erstes Ziel. Ich möchte die Häuser der Person in eine Datei speichern, aber mein Problem ist Wie kann ich den Namen des Objekts in die Funktion übergeben, damit seine Daten in einer Datei speichern? Ich kann manuell die Kubo platzieren und so als

PlayerHouse = Kubo.Name; 

Aber was tun, wenn ich nicht weiß, welches Haus soll ich sparen? Wie anstelle von

PlayerHouse = Apartment.Name;//2nd house 
PlayerHouse = Modern.Name;//3rd house 

Kann ich ein Funktionsargument verwenden, um den Namen des Objekts in PlayerHouse zu platzieren? Wie dies

void SetHouseName(type object){ 
    PlayerHouse = object.Name; 
} 

Antwort

1

Ein paar Möglichkeiten, wie dies getan werden kann .. hält alle erstellten Objekte in einem Container und greifen dann auf den Container zu, um das Objekt zu erhalten und übergeben ihm eine Funktion, die es in eine Datei schreibt.

Auch wenn Sie nicht wollen, um den Behälter zu halten, was Sie über die Verwendung der Funktion auch feine

0

Natürlich, aber wenn Sie gehen, um die Name des Hauses sparen sowieso, warum gehst du nicht einfach fragen Sie nach einem std::string an erster Stelle und dann die Name dieser Funktion übergeben?

void SetHouseName(std::string name) 
{ 
    PlayerHouse = name; 
} 

Wenn diese außerhalb Ihrer House Klasse benötigen Sie eine Methode zu erstellen, um die Name Mitglied House obwohl aussetzen, oder es nur public machen.

Ihre erste Frage zu beantworten, wie, wie Sie würde eingebauten Typen passieren, können Sie für Ihre House Typ das gleiche tun:

void SetHouseName(House house) 
{ 
    PlayerHouse = house.Name; 
} 
+0

Eh, sicher eigentlich nicht erwähnt wird funktionieren, wenn OP über den Namen Objekt im Gespräch oder dem 'Name' Mitglied der Klasse 'Haus', meh. –

+0

Tbh Ich möchte nicht, dass irgendwelche Objekte meiner Klasse öffentliche Variablen haben, weil dann irgendwo im Skript einige meiner Funktionen die Variablen versehentlich bearbeiten können. – CraftedGaming

+0

Dann holen Sie sich einfach eine 'GetName() const' Methode. –

Verwandte Themen