www.mikrocontroller.net

Forum: PC-Programmierung Klasse in C++


Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Ich habe folgende Klasse in c++:

class person
{
   public:

   string GetName ();
   void   SetName (string name_);

   private:

   string name_;
};

In dieser möchte ich eine Funktion SetName () und  GetName() erstellen.
Ich habe mir gedachte, dass ich SetName so schreibe:

void SetName ()
{
  cout << "A name please: " << endl;   //Name wird gefordert
  cin  >> this -> name_;              //Liest Namen ein und übergibt ihn 
an
                                      //_name
}

string GetName (string _name)
{
  return name_;
}

ist das korrekt?

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Methoden und ihre Signaturen sollten schon zusammenpassen.

Und syntaktisch geht das so nicht, weil der Compiler bei der 
Methodendefinition die Zuordnung zur Klasse nicht erkennt (person:: 
davor).

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Ich habe folgende Klasse in c++:

class person
{
   public:

   string GetName (string name_);
   void   SetName ();

   private:

   string name_;
};

In dieser möchte ich eine Funktion SetName () und  GetName() erstellen.
Ich habe mir gedachte, dass ich SetName so schreibe:

void SetName ()
{
  cout << "A name please: " << endl;   //Name wird gefordert
  cin  >> this -> name_;              //Liest Namen ein und übergibt ihn
an
                                      //_name
}

string GetName (string _name)
{
  return name_;
}

ist das korrekt?

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Ich habe folgende Klasse in c++:

class person
{
   public:

   string GetName (string name_);
   void   SetName ();

   private:

   string name_;
};

In dieser möchte ich eine Funktion SetName () und  GetName() erstellen.
Ich habe mir gedachte, dass ich SetName so schreibe:

void person::SetName ()
{
  cout << "A name please: " << endl;   //Name wird gefordert
  cin  >> this -> name_;              //Liest Namen ein und übergibt ihn
an
                                      //_name
}

string person::GetName (string _name)
{
  return name_;
}

ist das korrekt?

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Syntaktisch ja, inhaltlich eher nicht.

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
was denn inhaltlich falsch?

Autor: Daniel D. (bademeister)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schon besser, aber normalerweise macht man das einlesen in ner anderen 
Funktion. Dort ruft man dann SetName auf. Das hat vor allem den Vorteil, 
dass man dann deutlich flexibler ist und nicht z.b. ne 2te SetName 
schreiben muss, wenn man das nicht per Tastatureingabe macht.

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
26 C:\Dev-Cpp\C von A bis Z\EM 2008\em_2008.h no `std::string 
Person::GetName(std::string)' member function declared in class `Person'

die fehlermeldung bekomme ich :(

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich nun in der main Fuktion GetName und SetName aufrufen möchte, 
dann schreibe ich doch:

person::GetName();
person::SetName();

oder

Autor: Daniel D. (bademeister)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Normalerweise legst du vorher ein Objekt an über dass dann auf die get- 
und set Operation zugegriffen wird.

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie meinst du das ? Habe c++ die Klasse noch nicht wirklich 
verstanden.Habe bisher C programmiert. Könntest die Main mir 
hinschreiben bzw wo du den Fehler siehst

Autor: Daniel D. (bademeister)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bin zwar auch kein C++ Experte, aber:


class person {
   public:
     void   setName(String name);
     String getName(void);

   private:
     Sring name_;
}

void person::setName(String name) {
   name_ = name;
}

void person::getName() {
   return name_;
}


int main() {
   person einePerson;

   einePerson.setName("Paul");
   cout << "Die Person heißt:" << einePerson.getName();

   return 0;
}


Keine Garantie auf absolute Korrektheit, aber so sollte es zumindest von 
der Grundidee passen.

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Noch ein bischen schöner:
#include <string>
#include <iostream>
using namespace std;

class person {
   public:
     void setName(const string & name);
     const string & getName() const;

   private:
     string name_;
};

void person::setName(const string & name) {
   name_ = name;
}

const string & person::getName() const {
   return name_;
}


int main() {
   person einePerson;

   einePerson.setName("Paul");
   cout << "Die Person heißt:" << einePerson.getName() << endl;

   return 0;
}

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke.

Das kompeliert er aber nicht.Fehlermeldungen:

14 C:\Dev-Cpp\C von A bis Z\main.cpp new types may not be defined in a 
return type

14 C:\Dev-Cpp\C von A bis Z\main.cpp two or more data types in 
declaration of `setName'

14 C:\Dev-Cpp\C von A bis Z\main.cpp prototype for `person 
person::setName(const std::string&)' does not match any in class 
`person'

7 C:\Dev-Cpp\C von A bis Z\main.cpp void person::setName(const 
std::string&)

14 C:\Dev-Cpp\C von A bis Z\main.cpp `person person::setName(const 
std::string&)' and `void person::setName(const std::string&)' cannot be 
overloaded

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hatte den Strichpunkt nach class person {..} vergessen, habs oben 
korrigiert.

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.