2016-11-03 4 views
2

Bitte lesen Sie die Frage, bevor Sie es als Duplikat markieren.
Also hier ist was ich versuche zu erreichen. Grundsätzlich habe ich eine Zeichenfolge, die anfänglich etwas Wert enthält.
Ich habe mein Programm in viele Klassen für Modularität aufgeteilt (Sie können eine bessere Möglichkeit vorschlagen - zur Zeit enthält jede Datei eine Klasse)
Also sagen Sie für zB ich möchte die Daten mit Klasse1 bearbeiten, dann die Die geänderte Zeichenfolge muss von Class2 usw. bearbeitet werden.

z. Initial Eintrag "Hallo Welt"
erste Klasse -> "Hallo Welt"
zweite Klasse -> "H @ l @ o WORLD"
thiid Klasse -> "# @ l @ o WORLD"
und so on ...

Überall lesen, dass globale Variablen ein großes Nein sind, wenn es um Probleme und Nachteile geht. Also denke daran, was ich am besten zwischen den Klassen teilen könnte.
Ich dachte auch, die Zeichenfolge als Zeiger auf jede Funktion übergeben, aber ich dachte, es könnte bessere Alternativen dazu geben. Bitte vorschlagen.
Danke, dass Sie vorbeischauen, um meine Fragen zu lesen und mir zu helfen.Die beste Methode zum Implementieren einer globalen Variablen für die Verwendung in der Klasse in C++

+0

Es ist nichts falsch mit globalen Variablen. Geben Sie denken, dass sie uns nur ermutigen, nicht faul zu sein, was gut ist. Eine Sache, die Sie tun können, ist diese Variable als geschützt in einer Basisklasse zu setzen. DANN erben alle anderen Klassen von der Basisklasse. Sie haben jetzt alle Zugriff auf die Basisklassenvariable. –

+0

Ich dachte, aber wie wäre es möglich, dass sie alle die gleichen Daten der Basisklasse (der gleiche Wert im ganzen) teilen, wenn das individuelle Objekt jeder Klasse erstellt wird? –

+0

Ah, natürlich. Zu früh am Morgen. Es tut uns leid. –

Antwort

1

Ohne genau zu wissen warum Sie dies tun wollen, ist es schwer zu beantworten. Aber ich sehe nicht, was mit nur falsch ist, die string als Verweis auf jede Klasse viel wie Sie vorbei vorschlagen:

class StringModifier1 { 
public: 
    void operator()(std::string& s) { 
    // modify s... 
    } 
}; 
class StringModifier2 { 
public: 
    void operator()(std::string& s) { 
    // modify s... 
    } 
}; 
class StringModifier3 { 
public: 
    void operator()(std::string& s) { 
    // modify s 
    } 
}; 

int main() { 
    std::string myString = "hello world"; 

    StringModifier1 modifier1; 
    StringModifier2 modifier2; 
    StringModifier3 modifier3; 

    modifier1(myString); 
    modifier2(myString); 
    modifier3(myString); 
} 

Live demo.

In einigen Fällen müssen Sie möglicherweise die Klassen wollen einen Zeiger speichern oder Bezug auf die Zeichenkette:

class StringModifier1 { 
private: 
std::string& s; 

void func1() { 
    // modify s... 
} 
void func2() { 
    // modify s some more... 
} 
public: 
    StringModifier1(std::string& s) : s(s) {} 

    void execute() { 
     func1(); 
     func2();   
    } 
}; 

int main() { 
    std::string myString = "hello world"; 

    StringModifier1 modifier1(myString); 
    modifier1.execute(); 

    StringModifier2 modifier2(myString); 
    modifier2.execute(); 

    StringModifier3 modifier3(myString); 
    modifier3.execute(); 
} 

Live demo.

Möglicherweise möchten Sie eine Klasse besitzen und Zugriff auf die Zeichenfolge und die anderen Klassen verfügen über einen Zeiger oder einen Verweis auf die besitzende Klasse.

+0

Dies war meine letzte Option bereits, wie ich in der que erwähnt .. Haben Sie andere gute Vorschläge? Kannst du meinen letzten Kommentar auf que überprüfen und vorschlagen, ob es ein guter Weg ist –

+0

@KushanMehta Nun, ich kann nichts falsch daran sehen. Können Sie? –

+1

Warum Klassen überhaupt verwenden? Brauchen nur drei Funktionen, die eine Zeichenfolge und eine geänderte Zeichenfolge zurückgeben. –

Verwandte Themen