Forum: PC-Programmierung Klasse in C++


von Paul (Gast)


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?

von Andreas K. (a-k)


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).

von Paul (Gast)


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?

von Paul (Gast)


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?

von Andreas K. (a-k)


Lesenswert?

Syntaktisch ja, inhaltlich eher nicht.

von Paul (Gast)


Lesenswert?

was denn inhaltlich falsch?

von Daniel D. (bademeister)


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.

von Paul (Gast)


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 :(

von Paul (Gast)


Lesenswert?

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

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

oder

von Daniel D. (bademeister)


Lesenswert?

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

von Paul (Gast)


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

von Daniel D. (bademeister)


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.

von Εrnst B. (ernst)


Lesenswert?

Noch ein bischen schöner:
1
#include <string>
2
#include <iostream>
3
using namespace std;
4
5
class person {
6
   public:
7
     void setName(const string & name);
8
     const string & getName() const;
9
10
   private:
11
     string name_;
12
};
13
14
void person::setName(const string & name) {
15
   name_ = name;
16
}
17
18
const string & person::getName() const {
19
   return name_;
20
}
21
22
23
int main() {
24
   person einePerson;
25
26
   einePerson.setName("Paul");
27
   cout << "Die Person heißt:" << einePerson.getName() << endl;
28
29
   return 0;
30
}

von Paul (Gast)


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

von Εrnst B. (ernst)


Lesenswert?

Hatte den Strichpunkt nach class person {..} vergessen, habs oben 
korrigiert.

von Paul (Gast)


Lesenswert?

Danke

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.