Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Zusammenfassen von Standard- und allgemeinem Konstruktor?

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
05.09.2006, 23:17 Uhr
Yadgar



High!

Aupperle fragt mich auf Seite 651, ob es denn möglich sei, den (parameterlosen) Standardkonstruktor und einen Allgemeinen Konstruktor mit zwei Parametern zu einem Konstruktor zusammenzufassen... mein erster Gedanke war "variable Parameterliste", und die Deklaration des Standardkonstruktors mit Ellipse wird auch anstandslos kompiliert - aber wie implementiere ich die Unterscheidung zwischen keinem, einem und zwei Parametern? Ein erster fester Parameter mit der Anzahl der sonstigen noch folgenden Parameter kann ja hier wohl nicht die Lösung sein...

Hier der Code:


C++:
// Vererbung mit impliziten Standardkonstruktoren
// (AUPPERLE, S. 651f, Übung 26-13)

#include <iostream>
using namespace std;

struct Point
{
   int x, y;
   Point(...);
   Point(int in_x, int in_y);
};


Point::Point(...)
: x(0), y(0)
{}

Point::Point(int in_x, int in_y)
: x(in_x), y(in_y)
{}

struct NamedPoint : public Point
{
   string name;
};

int main()
{
   NamedPoint np;
   cout << np.name << endl;
}



Bis bald im Khyberspace!

Yadgar
--
Flagmaker - ein Programmier-Blog
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
05.09.2006, 23:23 Uhr
Spacelord
Hoffnungsloser Fall



C++:
   Point(int _x=0, int _y=0):x(_x),y(_y){};


--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.

Dieser Post wurde am 05.09.2006 um 23:24 Uhr von Spacelord editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
05.09.2006, 23:34 Uhr
Yadgar



High!


Zitat von Spacelord:

C++:
   Point(int _x=0, int _y=0):x(_x),y(_y){};




Das funktioniert (sofern sonst kein Konstruktor vorhanden ist) bei mir nicht, ich bekomme die Fehlermeldung

prototype for `Point::Point(int, int)' does not match any in class `Point'

In der Deklaration steht Point(...);

Bis bald im Khyberspace!

Yadgar
--
Flagmaker - ein Programmier-Blog
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
05.09.2006, 23:41 Uhr
Spacelord
Hoffnungsloser Fall


Schmeiss den Konstruktor mit der Ellipse raus und vergiss das am besten ganz schnell wieder.

C++:
struct Point
{
   int x, y;
   Point(int in_x=0, int in_y=0):x(in_x),y(in_y){};
};



Gruss Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
05.09.2006, 23:58 Uhr
Blubber2063



Recht hat der Spacelord, variable Parameterlisten sind eigentlich C und auch dort nicht unbedingt so das wahre, hier wird mit Sicherheit auf die Möglichkeit angespielt in C++ default Werte für Parameter anzugeben, wie es Spacelord dir gezeigt hat.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
06.09.2006, 09:00 Uhr
ao

(Operator)



Zitat von Blubber2063:
Recht hat der Spacelord, variable Parameterlisten sind eigentlich C und auch dort nicht unbedingt so das wahre ...

Na ja, ohne Ellipse kein scanf und printf. Die Ellipse bedeutet "schmeiß mir irgendwas auf den Stack, ich komm schon damit klar". Und wenn man sich mental drauf einstellt, dass man mit C sowieso in die Bronzezeit zurückgeht, dann gehts mit den Makros aus vararg.h noch ganz gut.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
06.09.2006, 10:32 Uhr
0xdeadbeef
Gott
(Operator)


Wichtig zu beachten bei den Default-Argumenten ist, dass diese in der Deklaration stehen müssen (ie im Header). Also

C++:
// foo.hh

#ifndef INCLUDED_FOO_HH
#define INCLUDED_FOO_HH

class foo {
public:
  foo(int x = 0);

private:
  int x_;
};

#endif

// foo.cc

#include <foo.hh>

foo:foo(int x) : x_(x) {
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


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: