Webmaster Forum Logo Part 1 Webmaster Forum Logo Part 2
Webmaster Forum Logo Part 3
     
 
  :: Anmeldung

Benutzername:

Registrierung...

Passwort:

Passwort vergessen?

angemeldet bleiben


  
  :: Umfrage
Welche sozialen Netzwerke benutzt du regelmäßig?

 Facebook
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 73%
 keines
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 22%
 Google+
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 19%
 Twitter
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 11%
 Xing
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 6%
 schülerVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 5%
 meinVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 4%
 studiVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 4%
 MySpace
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 2%
 LinkedIn
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 2%

 ges. 392 Stimmen
 
  :: Buttons

Valid XHTML 1.0 Transitional

quibb

Foren As

Dabei seit: 12.05.2004

Beiträge: 88

 

1 Zum Seitenanfang

Samstag, 28. Januar 2006, 20:55

again and again stl ;)

so hab da n (kleines) problem ;P

Zur Frage:

In einem Conatiner sollen Objekte von verschiedenen Klassen(eine haupt und eine unterklasse die erbt) gespeichert werden.

Wie kann man es realisieren das beim eintragen von einer Kaffeemaschine (siehe main.cpp) die Klasse Kaffeemaschine bei der funktion GeraetEintragen() benutzt wird und nicht AllgemeinesGeraet.

Weiteres Problem besteht darin wie man dann in GeraetEintragen das Attribut iAnzahlTassen verwendet.

fragen über fragen
gruesse quibb

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "Geraete.h"
#include <iostream>
using namespace std;

int main(void) {

	AllgemeinesGeraet test;

	Kaffeemaschine geraet1("bla", 1);

	test.GeraetEintragen(geraet1);

	cout << test;

	return 0;
}


Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <vector>
#include <string>
#include <iostream>
using namespace std;


class AllgemeinesGeraet {

	vector<AllgemeinesGeraet> Geraet;

	private:

		string sGeraetBezeichnung;

	public:

		AllgemeinesGeraet();
		AllgemeinesGeraet(string sBezeichnung);

		void GeraetEintragen(AllgemeinesGeraet &b) { // <-PROBLEM
			
			Geraet.push_back(b);
		}

		
		friend ostream& operator<<(ostream& os, AllgemeinesGeraet &test) {
				
			vector<AllgemeinesGeraet>::iterator pos;

			for (pos = test.Geraet.begin(); pos < test.Geraet.end(); ++pos)
			{				
				os << *pos << endl;			
			}

			os << "Bezeichnung: " << test.sGeraetBezeichnung;
			return os;
		}
};

class Kaffeemaschine : public AllgemeinesGeraet {

	private:

		int iAnzahlTassen;

	public:

		Kaffeemaschine(string sBezeichnung, int iTassen);
};
 

silence

König

Dabei seit: 28.02.2003

Beiträge: 981

 

2 Zum Seitenanfang

Samstag, 28. Januar 2006, 22:56

Vielleicht solltest du es lieber mit den Grundlagen von C++ versuchen...hast du überhaupt eine Ahnung was du da geschrieben (oder kopiert) hast?
Und deine Fehlerbeschreibung ist auch nicht das Wahre...

Ich weiß zwar nicht was du mit

Zitat

Wie kann man es realisieren das beim eintragen von einer Kaffeemaschine (siehe main.cpp) die Klasse Kaffeemaschine bei der funktion GeraetEintragen() benutzt wird und nicht AllgemeinesGeraet.

bewirken möchtest, aber wenn du willst das GereatEintragen aus der Klasse Kaffeemaschine genommen wird (wo liegt hier der Sinn? Denk mal darüber nach, warum wohl die Subklasse von der Oberklasse erbt) kannst du die Funktion in der Kaffeemaschine Klasse überschrieben.

Naja, hier von mir ein paar Tipps:
-Polymorphie (Stichwort: virtual)
-Was bewirkt eigentlich... (Stichwort: friend, übeladener Operator, etc)
-Wie man in C++ programmiert (Stichwort: Code in Headerdatein...)

Ich weiß nicht wieviel Zeit du bis zur Klausur hast, aber es scheint als hättest du das letzte Jahr (bzw die letzten Semester) geschlafen :finger:
Von Heute auf Morgen wirst du das auch nicht schaffen, wie schon gesagt, befass dich erstmal mit den Grundlagen (Klassen allgemein, dann Vererbung, dann Polymorphie), nicht alles auf einmal >_>
Aktuell nutze ich: Windows, Linux, MacOS X, Solaris...weil die Welt nicht nur S/W ist!
Blog

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »silence« (28. Januar 2006, 23:00)

 

quibb

Foren As

Dabei seit: 12.05.2004

Beiträge: 88

 

3 Zum Seitenanfang

Freitag, 3. Februar 2006, 02:31

also der code is selber geschrieben... naja ob ich ihn verstehe is so ne andere sache.
und das einzigste was ich erreichen will ist das ne kaffeemaschine mit 2 attributen in dem container gespeichert wird und ich diese dann auch wieder ausgeben kann.

aber erstmal vielen dank
quibb

Nachtrag:

So hab fleissig Grundlagen studiert und möchte mich nochmal entschuldigen das ich sachen poste von denen ich keinen ahnung hab ^^
und ja ich hab das semester verpennt ;P
gruesse quibb

falls es jmd. intressiert: keine ahnung ob die lösung "wunderbar" ist. aber es funktioniert...

main.cpp

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include "objekt.h"

int main(void) {

	AllgemeinesGeraet Geraet1;

	Geraet1.Geraet.push_back(new Kaffeemaschine("Tchibo XL1", 6));
	Geraet1.Geraet.push_back(new Heizung("Erdgeschoss Kueche", 18));

	for(vector<AllgemeinesGeraet*>::iterator j = Geraet1.Geraet.begin(); j != Geraet1.Geraet.end(); j++)
		(*j)->ausgabe();

	return 0;
}


objekt.h

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <vector>
#include <string>
#include <iostream>
using namespace std;

class AllgemeinesGeraet {

	private:

		string sBezeichnung;

	public:

		vector<AllgemeinesGeraet*> Geraet;
		
		AllgemeinesGeraet();
		AllgemeinesGeraet(string);

		string GetBezeichnung() {
			return sBezeichnung;
		}

		virtual ausgabe() {
		}
};

class Kaffeemaschine : public AllgemeinesGeraet {

	private:

		int iAnzahlTassen;

	public:

		Kaffeemaschine();
		Kaffeemaschine(string, int);

		virtual ausgabe() {

			cout << "Kaffeemaschine: " << AllgemeinesGeraet::GetBezeichnung() << " mit " << iAnzahlTassen << " Tassen Kaffee." << endl << endl;
        } 
};

class Heizung : public AllgemeinesGeraet {

	private:

		int iTemperatur;

	public:

		Heizung(string, int);

		virtual ausgabe() {

			cout << "Heizung: " << AllgemeinesGeraet::GetBezeichnung() << " mit " << iTemperatur << " Grad Celsius." << endl << endl;
        } 
};


objekt.cpp

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "objekt.h"

AllgemeinesGeraet::AllgemeinesGeraet() {
}

AllgemeinesGeraet::AllgemeinesGeraet(string sBez) : sBezeichnung(sBez) {
}

Kaffeemaschine::Kaffeemaschine() {
}

Kaffeemaschine::Kaffeemaschine(string sBez, int iAnz) : AllgemeinesGeraet(sBez), iAnzahlTassen(iAnz) {
}

Heizung::Heizung(string sBez, int iTemp) : AllgemeinesGeraet(sBez), iTemperatur(iTemp) {
}

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »heinervdm« (3. Februar 2006, 09:43)