Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

hallo an alle,

ich habe ein problem undzwar versuche ich schon seit stunden einen + operator in einen * operator umzuwandeln was ja wie ich glaube gehen müsste in einer klasseninstanz, nun habe ich aber kein lehrbuch zur verfügung in dem das sinnvoll beschrieben wird wie ich das am besten anstellen soll.

kann mir einer von euch da weiterhelfen und mir eine kommentierte syntax zukommen lassen, weil das beispiel in der visual studio hilfe ist auf englisch und den sinn verstehe ich auch net so richtig

mfg

pepe_C

//=================================ausgangspunkt===============================

#include <iostream>


using namespace std;

//===========Klassendefinition===================

class ctest

{

	private:

		int a;

		int b;

		int ergebnis;

	public:

		ctest()

		{

			a=10;

			b=2;

		};

		void ausgabe();

		void rechne();

};

//=============================Funktionen==============================

void ctest::ausgabe()

 {

	 cout << ergebnis;

 };


void ctest::rechne()

{

	ergebnis = a+b;

};

//============================programmspass==============================

main ()

{

	ctest probe;

	probe.rechne();

	probe.ausgabe();

}


//==================und nun umbau vom operator + in den operator *=======


//=================================umbau der klasse===============================

#include <iostream>

#include <stdio.h>


using namespace std;

//===========Klassendefinition===================

class ctest

{

	private:

		int a;

		int b;

		int ergebnis;

	public:

		ctest() : a(10), b(2) { }


		friend ctest operator+ (const ctest &a, const ctest &;


		void ausgabe() { cout << ergebnis << endl; };

		void rechne();

};

//=============================Funktionen==============================

//void ctest::ausgabe()

// {

//	 cout << ergebnis;

// };


void ctest::rechne()

{

	ergebnis = a+b;

};


ctest operator+(const ctest &a, const ctest &

{

	ctest m;

	m.ergebnis = a.a * b.b;

	return m;

};

//============================programmspass==============================

int main ()

{

	ctest a(100), b(10), ergebnis;

	ergebnis = a+b;

	ergebnis.ausgabe();

	fflush(stdin);

	getchar();


}[/code]

wie ihr seht einmal die klasse nurmal und dann mein versuch, weiß aber nicht ob ich auif dem richtigen wege bin

mfg

Ist das, was unter "ausgangspunkt" steht, der Code, der dir vorgegeben wurde? Da ist gar kein benutzerdefinierter Operator drin, den du umwandeln könntest.

Wenn du willst, dass bei a+b multipliziert wird: Dazu müsstest du den operator* für int überladen, und das geht nicht - du kannst Operatoren für eingebaute Typen nicht überladen.

Ganz allgemein kann man aber sagen, dass Funktionsdefinitionen kein Semikolon am Ende benötigen, und dass fflush(stdin) undefiniertes Verhalten erzeugt.

Wenn du willst, dass bei a+b multipliziert wird: Dazu müsstest du den operator* für int überladen, und das geht nicht - du kannst Operatoren für eingebaute Typen nicht überladen.

heißt das ich kann dem operator + nicht sagen wenn + aufgerufen wird dann multipliziere die beiden variablen.

ich habe gedacht ich kann mit der überladung erreichen, dass wenn ich sage + du bist ab jetzt * das der dann auch multipliziert. habe ich das denn falsch verstanden????

unsere tollen herdt bücher geben den sinn der überladen von operatoren technik nicht preis.

also sitze ich hier und suche eine erklärung was ich damit tun kann!!!

mfg

heißt das ich kann dem operator + nicht sagen wenn + aufgerufen wird dann multipliziere die beiden variablen.
Es gibt nicht den operator+. Es gibt viele Überladungen davon. Du kannst für eigene Typen neue Operatorüberladungen anlegen. Aber du kannst nicht die bereits vorhandenen überschreiben.

ich habe gedacht ich kann mit der überladung erreichen, dass wenn ich sage + du bist ab jetzt * das der dann auch multipliziert. habe ich das denn falsch verstanden????
Du kannst Operatoren keine neue Identität zuweisen, insofern ist "du bist ab jetzt *" schlecht ausgedrückt. Du kannst für eigene Datentypen eine Überladung von operator+ erzeugen, die multipliziert - auch wenn sich mir der Sinn nicht erschließt.

unsere tollen herdt bücher geben den sinn der überladen von operatoren technik nicht preis.

also sitze ich hier und suche eine erklärung was ich damit tun kann!!!

Operatoren überlädt man dann für eigene Datentypen, wenn das die Verwendung erleichtert. Wenn du z.B. eine Klasse für Brüche hast, würde es sich anbieten, für diese Klasse die arithmetischen Operatoren zu überladen, damit du sie intuitiver verwenden kannst.

Ausnahme ist hier der operator=, den du immer dann überladen solltest, wenn eine Klasse mit dynamischem Speicher hantiert.

und dass fflush(stdin) undefiniertes Verhalten erzeugt.

wobei man aber erwähnen muss das es unter Windows durchaus gemacht werden kann :)

/* You must flush the input buffer before using gets. */

fflush( stdin ); // fflush on input stream is an extension to the C standard

Quelle: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_crt_fflush.asp

bei uns in der schule kam dann nach 7 stunden endlich mal ein lehrkörper der es uns "einfach" verklickert hat, seine aussage zu diesem thema:

man kann operatoren nicht überschreiben (wie ober gesagt) aber ich kann jedem (ein paar ausnahmen gibt es wohl) operator eine neu , wie sag ichs jetzt, möglichkeit definieren was er in genau dieser angegeben klasse für eine tätigkeit (sprich operation) übernehmen soll.

auf deutsch ich kann dem operator+ (was ja am ende auch nur eine funktion ist) sagen wenn er aufgerufen wird soll er hier nicht addieren sondern multiplizieren.

hoffe ich habe das jetzt verstanden.

wenn ich doch noch was falsch denke sagt es mir bitte

mfg

pepe_C

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.