Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Anfänger problem mit Klassen

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 < [ 2 ]
000
24.12.2005, 23:28 Uhr
FlorianW



Hi,
ich programmiere schon geraumer zeit mit c++ und habe mich nun erstmals an klassen herangewagt. Nun hab ich ein Problem mit einem keinen Testprogramm, eigentlich geht alles, bis auf variablen des typs "char"... Kann mir einer Sagen, was ich falsch gemacht hab? Ich abs extra auskommentirt, da mein compiler sonst meckert...


C++:
#include <iostream>

using namespace std;

class Arbeitnehmer
{
public:
    
    void setalter (int neualter) {alter = neualter;}
    int getalter() {return alter;}

    void setsteuerklasse (int neusteuerklasse) {steuerklasse = neusteuerklasse;}
    int getsteuerklasse() {return steuerklasse;}

    void setverheiratet (bool neuverheiratet) {verheiratet = neuverheiratet;}
    bool getverheiratet() {return verheiratet;}
    
    
    void geburtstag()
    {
        cout<<"Happy Birthday"<<endl;
    };


private:
    char Vorname[9], Nachname[9], Wohnort[11];
    int alter;
    int steuerklasse;
    bool verheiratet;
    

};




int main()
{
    Arbeitnehmer Mueller;
    Mueller.setalter(36);
    Mueller.setsteuerklasse(2);
    Mueller.setverheiratet(0);
//    Mueller.Vorname = "Herrmann";
//    Mueller.Vorname = "Mueller";
//    Mueller.Wohnort = "Berlin";

    cout<<"Arbeitnehmer 1:\nAlter "<<Mueller.getalter()<<endl<<"Steuerklasse "<<Mueller.getsteuerklasse()<<"\nVerheiratet? "<<Mueller.getverheiratet()<<endl;

    Mueller.geburtstag();

    cout<<endl<<endl<<endl;

    Arbeitnehmer Meier;
    Meier.setalter(22);
    Meier.setsteuerklasse (4);
    Meier.setverheiratet(true);

    cout<<"Arbeitnehmer 2:\nAlter: "<<Meier.getalter()<<endl<<"Steuerklasse: "<<Meier.getsteuerklasse()<<endl<<"Verheiratet? "<<Meier.getverheiratet()<<endl;

    Meier.geburtstag();


    int nichtschliessen;
    cin>>nichtschliessen;

    return 0;
}



Stimmt sonst alles so weit?

vielen dank für eure hilfe,
mfg. FlorianW
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
25.12.2005, 16:09 Uhr
predator



Du greifst dort auf Klassenelemente zu, die private sind; das geht so nicht.
Wie auch bei alter, steuerklasse und verheiratet brauchst du setter- bzw. getter-Methoden.

Außerdem funktioniert die Zuweisung so nicht, denn "Vorname" ist ein konstanter Zeiger auf das erste Element deines char-Arrays. Du kannst ihm also nichts anderes zuweisen, da du den Zeiger ja sonst verändern würdest.

Eine Möglichkeit wäre die Funktion strncpy
z.B. strncpy(Vorname, "text", 9);

Oder du nimmst gleich std::strings, ist um einiges einfacher und sicherer.
--
Gruß
predator
Zitat von Edsger W. Dijkstra:
Es ist praktisch unmöglich, einem Studenten gutes Programmieren beizubringen, wenn er vorher in BASIC programmiert hat. Als potenzielle Programmierer sind sie geistig verstümmelt ohne Hoffnung auf Erholung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
25.12.2005, 22:07 Uhr
FlorianW



Danke, prdator.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
26.12.2005, 01:10 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


Die bessere Idee wäre statt der chararrays std::string zu verwenden
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
26.12.2005, 09:52 Uhr
FlorianW



Hi Windalf, könntest du das mit den strings etwas genauer erklären oder gibts da ein tutorial für? Ich hab bisher immer mit chars gearbeitet...

mfg. FlorianW
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
26.12.2005, 11:59 Uhr
Gap



std::string ist eine Stringklasse, die dir die ganze Arbeit mit strcpy, etc. abnimmt.
Einfach includen:


C++:
#include <string>



Achtung: Kein ".h" hinter string

Dann einfach anstatt


C++:
char Vorname[9], Nachname[9], Wohnort[11];




C++:
std::string Vorname[9], Nachname[9], Wohnort[11];



schreiben

Dann einfach anstatt strcpy



C++:
Vorname = "Test-Text";


Dieser Post wurde am 26.12.2005 um 11:59 Uhr von Gap editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
26.12.2005, 18:46 Uhr
FlorianW



Danke, Gap!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
26.12.2005, 20:20 Uhr
ao

(Operator)



Zitat von Gap:

C++:
std::string Vorname[9], Nachname[9], Wohnort[11];



Noch besser:

C++:
std::string Vorname, Nachname, Wohnort;


sonst hat der werte Kollege 9 komplette Namen und wohnt an 11 verschiedenen Orten.

Schöne Weihnachten noch

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
26.12.2005, 21:00 Uhr
FlorianW



@ ao:
Wer weiß, wers hat mit den 9 Nahmen und 11 Wohnsitzen *g*^^

Nee, im ernst, danke für den tipp

greez FlorianW
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
27.12.2005, 00:11 Uhr
FlorianW



Ich bins nochmal^^
Ich versuch jezt so eine art kontaktverwaltung zu machen, und hab nun das problem, wie ich eine benutzer eingabe in einer privaten variable der kalasse speichern kann. Das mit den get und set stimmt aber so weit, oder?

Lange rede, kurzer sinn, das ist mein code:


C++:
#include <iostream>
#include <string>

using namespace std;

    char eing;

class kontakt
{
public:

    
    void setvorname (string neuvorname ) {vorname = neuvorname ;}
    string getvorname() {return vorname;}

    void setnachname (string neunachname ) {nachname = neunachname ;}
    string getnachname() {return nachname;}

    void setstrasse (string neustrasse ) {strasse = neustrasse;}
    string getstrasse() {return strasse;}

    void setort (string neuort ) { ort= neuort ;}
    string getort() {return ort;}

    void setgebtag (int neugebtag ) {gebtag = neugebtag;}
    int getgebtag () {return gebtag;}

    void setgebmonat (int neugebmonat ) {gebmonat = neugebmonat;}
    int getgebmonat () {return gebmonat;}

    void setgebjahr (int neugebjahr ) {gebjahr = neugebjahr;}
    int getgebjahr() {return gebjahr;}



private:
    string vorname, nachname, strasse, ort;
    int gebtag, gebmonat, gebjahr;

};


int main()
{
    cout<<"1)Neuen Kontakt hinzufuegen"<<endl;
    cout<<"2)Kontakte anzeigen"<<endl;

    cin>>eing;

    if (eing == '1')
    {
        kontakt a;
        cout<<"Vorname: ";
        cin>>a.getvorname();
        cout<<a.getvorname()<<endl;
    };


    return 0;
};



Mein problem ist also wie gesagt, dass der vorname nicht gespeichet wird, wie geht das mit cin?

ich hoffe, ich nerve nicht zu sehr...

mfg. FlorianW
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (WinAPI, Konsole) ]  


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: