Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Objekte - Konstruktor: Komme nicht weiter

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
13.11.2008, 11:52 Uhr
Fiend



Hallo liebe Leute,
ich habe folgende Aufgabe bekommen und weiß nicht weiter:

a) Implementieren Sie eine Klasse Pkw nach folgenden Angaben.
·Definieren Sie dazu Datenelemente marke vom Typ char *, fgstnr (Fahrgestellnummer) vom Typ unsigned long und leistung vom Typ unsigned int.
·Implementieren Sie einen Konstruktor, der die angegebenen Datenelemente initialisiert. Geben Sie für marke und leistung die Defaultwerte “Mercedes“ und 100 an. Der Konstruktor gibt die Meldung aus:
“Pkw der Marke xxx mit Fahrgestellnummer yyy und Leistung zzz erzeugt “
Dabei sollen in die Ausgabe jeweils die tatsächlichen Werte eingesetzt werden.
·Geben Sie Methoden zum Lesen und Schreiben (falls möglich) der Datenelemente an und setzen Sie die Zugriffsrechte geeignet.
b)Schreiben Sie eine Funktion main(), die ein Pkw-Objekt p1 mit Marke Beetle, der Fahrgestellnummer 1001 und Leistung 115 definiert. Anschließend wird die Belegung der Datenelemente von p1 ausgegeben.


Hier mein geschriebener Quelltext:
pkw.cpp


C++:
#include <iostream>
#include <cstring>
#include "pkwdef.h"

using namespace std;

//int pkw::eingabe(int anzahl);
//int pkw::ausgabe(pkw *ar, int groesse);

pkw::pkw(char *marke, unsigned long fgstnr, unsigned int leistung){ //Konstruktor
    pkwobj.marke="mercedes";
    pkwobj.fgstnr=0;
    pkwobj.leistung=100;
    cout << "Standardinitialisierung erfolgt" << endl;
    cout << "Pkw der Marke" << marke;
    cout << "mit Fahrgestellnummer" << fgstnr;
    cout << "und Leistung" << leistung;
    cout << "erzeugt." << endl;
}

int pkw::eingabe(int anzahl)
{
    int i;            //Lokale Variablen
    char marke;
    int fgstnr;
    int leistung;

    for (i=0; anzahl < i; i++){
        cout << "Datensatz " << i ;
        cout << "von" << anzahl;
        cout << "wird eingelesen" << endl << endl;
        cout << "Marke: " << endl;
        cin >> marke;
        cout << "Fahrgestellnr: " << endl;
        cin >> fgstnr;
        cout << "Leistung: " << endl;
        cin >> leistung;
        cout << endl << "Objekte werden auf Heap erzeugt ..." << endl;
        pkw *pointer;
        pointer = new pkwobj[anzahl];
        strncpy(pkw[i].marke,marke);
        pkw[i].fgstnr=fgstnr;
        pkw[i].leistung=leistung;
    }
    return(*pointer);
}

int pkw::ausgabe(pkw *ar, int groesse)
{
    int i = 0;
    cout << "Datensätze werden ausgegeben: " << endl << endl;
    while (i<=(groesse -1))
        cout << ar[i] << endl;
        i++;
    cout << "Fertig";
}

void main ()
{
    int anzahl, i, *p, ausg;
    cout << "Wieviele Datensaetze sollen eingelesen werden ?" << endl << "Anzahl: ";
    cin >> anzahl;

    cout << "Dateneingabe: Nutzen / Aufruf der Funktion eingabe" << endl;
    p = eingabe(anzahl);

    cout << "Datenausgabe: Nutzen / Aufruf der Funktion ausgabe" << endl;
    ausg = ausgabe(p, anzahl);    
}



Und die Header Datei:
pkw.h


C++:
class pkw{
    private:
        char* marke;
        unsigned long fgstnr;
        unsigned int leistung;

    public:
               //Konstruktor und Destruktor
        pkw(char *marke, unsigned long fgstnr, unsigned int leistung);
        ~pkw();

        int eingabe(int anzahl);
        int ausgabe(pkw *ar, int groesse);
            
};





Kann mir jemand einen Tip geben? Wäre sehr dankbar.

Vielen Dank in voraus.
--
www.medieninformatik-studium.de
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
17.11.2008, 12:33 Uhr
ao

(Operator)



Zitat:
Implementieren Sie eine Klasse Pkw nach folgenden Angaben.
·Definieren Sie dazu Datenelemente marke vom Typ char * ...


Ächz. Schon wieder ein Prof, der noch nix von std::string gehört hat und meint, C++ wär nur C mit Klassen.

War nicht "Verbesserung der Lehre" ein Zweck der Studiengebühren? Hier gibts viel Potential, würde ich sagen.

Zu deinem Problem: Wir sehen den Code, aber wo hängts denn?

In dem Konstruktor verwendest du etwas, das pkwobj heißt. Das brauchst du nicht, du bist da bereits in einem PKW-Objekt und kannst marke, fgstnr und leistung direkt ansprechen.

eingabe und ausgabe sind so, wie sie da stehen, Entwurfsfehler. Die Klasse pkw hat eine Methode eingabe, die N neue Instanzen vom Typ pkw erzeugt - das ist Unsinn, ein PKW erzeugt keine anderen PKWs. Denkbar wäre eine sogenannte "statische Fabrikmethode", aber so weit seid ihr bestimmt noch nicht, und in der Aufgabenstellung steht auch nix davon.

Für die Ausgabe gilt dasselbe: Ein PKW kann nicht die Daten von mehreren anderen anzeigen, nur seine eigenen. Beim OO-Entwurf immer im Hinterkopf behalten: Du modellierst die Realität, und wenn du dabei Fehler machst, hast du später Schwierigkeiten, reale Aufgabenstellungen abzubilden.

Du sollst einen Konstruktor schreiben. Hast du gemacht, aber dem fehlen noch die Default-Argumente für marke und leistung. Und dann sollst du Zugriffsmethoden für die Membervariablen schreiben, also Setter und Getter für Marke, Fahrgestellnummer und Leistung. Wobei alle drei eigentlich unveränderlich sind - brauchen die einen Setter?

Dieser Post wurde am 17.11.2008 um 12:34 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: