Was muss ich benutzen? - Funktionen oder Klassen?

Sircoly

Mitglied
Halli Hallo,

ich hab da mal ne Fräge:
Ich zeige euch einfach mal, was passieren soll.

Ich habe die Funktion/Klasse Aendere().
Jetzt gebe ich einen Quelltext(Q1) ein.
Danach kommt noch ein Quelltext(Q2).
Jetzt setze ich Q1 in Aendere().
Dort soll dann Vor Q1, der nun in der Funktion aufgerufen wird,
und nach Q1 irgendein befehl ausgeführt werden.
So das das ganze in der Funktion/Klasse dann So aussieht:
Code:
Aendere()
{
   Befehl1.....

  Q1

   Befehl2.....
}

Kann man sowas machen? - Ich habe anfänge, aber die Funktionieren nicht so ganz.
Denn ich möchte, dass man die Funktion/Klasse dann so aufruft:
Code:
Aendere()
{
  cout << "hallo";
}

z.B. könnte man die Farbe der Ausgabe ändern(Befehl1 und nach der Ausgabe wieder die Normalfarbe ändern(Befehl2)

Wie geht sowas? - Hier ist mal mein Anfang:
C++:
class ChangeColor															// Klasse 'ChangeColor'
{
	int ce;

public:
	ChangeColor(int color_beginn, int color_end) : ce(color_end)
	{
		SetColor(color_beginn);
	}

	~ChangeColor()
	{
					// NIX tun
	}

	ChangeColor(int color_beginn, int color_end)
	{
		SetColor(ce);
	}
};




void main()
{	
	char name[101];
	cout << "Gib deinen Namen ein: ";
	cin  >> name;

	system("CLS");
	ChangeColor(GRUEN, NORMAL);
	{
		cout << "Dein eingegebener Name war: " << name;
	}
	cout << endl << "Druecken Sie irgendeine Taste zum Beenden ";
	Warte(100);
}
aber es klappt nicht. könnt ihr mir helfen, dass das funktioniert, so wie ich es will? - BITTE! - Ich komm da grade nicht so ganz klar mit...
 
Zuletzt bearbeitet von einem Moderator:
Wenn ich dich richtig vestehe, willst du, dass nach dem cout von alleine wieder die Farbe zurückgesetzt und "Druecken Sie irgendeine Taste zum Beenden" dann wieder in normaler schrift dargestellt wird. Wenn ja, dann gibts keine möglichkeit das automatisch zu bewerkstelligen. Aber warum brauchst du das überhaupt? Du kannst doch direkt danach wieder die Farbe per erneutem Funktionsausfruf umstellen.

EDIT: mir fällt da noch ein, du könntest es mit Funktionspointern versuchen. (würde es aber eher wie oben beschrieben machen)
 
Halli Hallo,

ja, genau das meine ich.
Ich wollte das einfach mal als Übung machen.
Wollte das dann später in einem Projekt einbinden.(Datenbank verbinden und bei einem Error Rote Schrift, etc...)
Ginge das nicht per Klasse?
Ich bin jetzt Soweit:
C++:
/***** Klassen *****/
class Color 
{
private:
	int ce;

	bool ChangeColorAction(int color)
	{
		SetColor(color);
	}

public:
	ChangeColor(int color_begin, int color_end) : ce(color_end) 
	{
		SetColor (color_begin);
	}
    
	~ChangeColor() 
	{
		SetColor(ce);
	}
};

Und soweit funktioniert es auch. Ich will halt, dass ich den Aufruf nicht erst :
C++:
	Color;
    {
		ChangeColor c(GELB, NORMAL);
		cout << "Dein eingegebener Name war: " << name;
    }
... machen muss, sondern dass ich direkt:
C++:
	ChangeColor(GELB, NORMAL);
    {
		cout << "Dein eingegebener Name war: " << name;
    }
... machen kann. - Kann ich irgendwie DIREKT auf die Funktion in der Klasse Zugreifen, die ich aufrufe,
damit er die Farbe ändert? - Oder gibts da ne Andere Methode?
 
Zuletzt bearbeitet von einem Moderator:
Hi.
Sircoly hat gesagt.:
das ich direkt:
C++:
	ChangeColor(GELB, NORMAL);
    {
		cout << "Dein eingegebener Name war: " << name;
    }
... machen kann.
Nein. So wie du es beschrieben hast ist es die einzige Möglichkeit eine automatische Variable zu benutzen, die am Anfang eines Blocks zu kreieren und dann am Ende vom Block automatisch zerstören zu lassen. Dabei wird im Konstruktor bzw. Destruktor jeweils die entsprechende Funktion ausgeführt. Aber ich finde das
C++:
{
  ChangeColor c(GELB, NORMAL);
  cout << "Dein eingegebener Name war: " << name;
}
deiner Wunschvariante doch schon recht nahe kommt. Du kannst aber nicht die Semantik der Sprache ändern.
Sircoly hat gesagt.:
Kann ich irgendwie DIREKT auf die Funktion in der Klasse Zugreifen, die ich aufrufe,
damit er die Farbe ändert?
Wie meinst du das jetzt?

Gruß

PS: Bitte poste nicht zig Beiträge zu ein und demselben Thema. Schließlich ist das hier kein Chat-Room und es kann mal etwas dauern bis man eine Antwort kriegt.
 
Zuletzt bearbeitet von einem Moderator:
Halli Hallo,

ich meine, ich habe ja die Klasse 'Color' und darin die Funktion 'ChangeColor'.
kann ich DIREKT, auf die Funktion ChangeOlor zugreifen, ohne dass ich das ...
C++:
Color();
{
}
... schreiben muss?
 
Zuletzt bearbeitet von einem Moderator:
Hi.

Ach, jetzt seh ich das erst, dass du das falsch umdefiniert hast. Der Name des Konstruktors muß mit dem Klassennamen übereinstimmen und der Destruktur bekommt nur eine Tilde dem Namen vorangestellt. So wie du das da definiert hast kann es nicht funktionieren.

Der Code den du da gerade gepostet hast, macht überhaupt nichts. Es wird lediglich ein temporäres Objekt vom Typ Color erzeugt (und dann auch gleich wieder zerstört). Dabei passiert nichts.

Die Funktion ChangeColor der ChangeColor Klasse ist keine normale Funktion (bzw. Methode) sondern nennt sich Konstruktor. Der Konstruktor wird aufgerufen wenn eine Instanz dieser Klasse erstellt wird.

Umgekehrt ist ~ChangeColor der Destruktor und wird aufgerufen wenn eine Instanz der Klasse ChangeColor zerstört wird.

Gruß
 
Zurück