Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Template-bastelei

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 ] [ 3 ] > 4 <
030
15.08.2003, 12:26 Uhr
0xdeadbeef
Gott
(Operator)


Stimmt ja, this ist eine lokale Variable. Ich hab das immer anders aufgefasst, weil this ja eigentlich eine instanzspezifische Sache ist. OK, ich muss ein bisschen denken, wir reden in ein paar Stunden weiter (hoffentlich).

Allerdings - mal ganz grundsätzlich - sonderlich schön ist diese ganze Default-Parameter-Geschichte in C++ eh nicht, weil sie die Trennung von Deklaration und Implementierung aufweicht. Welchen Wert ein Parameter per default annimmt, ist eigentlich Implementierung. Wirklich durchgestylt wäre sowas:

C++:
//.h
class A {
  int foo(int, opt int);
};

//.cpp
int A::foo(int x, opt int y = 0) { return x + y; }

und damit gingen locker auch solche Schweinereien:

C++:
//.h
class A {
  void foo(int, opt int, opt int, opt B& );
};

//.cpp
void A::foo(int x, opt int y = 0, opt int z = x*y, opt B &b = B(this)) { }

--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 15.08.2003 um 12:32 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
031
15.08.2003, 13:03 Uhr
virtual
Sexiest Bit alive
(Operator)


Vorsicht: Die Defaultargument gehören in den Header.
Bearbeitung:
Oh -war ja absicht - Ja ich stimme dir zu!

Auf ein kleines Feature, welches von Struppi allerdings gegeisselt wird (weil Fehlerträchtig) möchgte ich Dich noch hinweisen:


C++:
#include <iostream>

void f(int x=8)
{
    std::cout<<x<<std::endl;
}

void g()
{
    void f(int x=9); // Überschreibe Defaultargument
    f(); // Benutze neues Defaultargument
}

int main()
{
    g();
}


Das funktioniert natürlich nach wie vor nur mit nicht lokalen Variablen und nur, wenn das Überschreiebn der Defaultargumente in einem anderen Scope geschieht, als im Original.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)

Dieser Post wurde am 15.08.2003 um 13:18 Uhr von virtual editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
032
15.08.2003, 13:27 Uhr
0xdeadbeef
Gott
(Operator)


Hm. Gut zu wissen, das sowas geht, aber in meiner Situation bringt mich das nicht wirklich weiter. Naja, muss ich halt den umständlichen Weg nehmen.

Aber - je mehr ich drüber nachdenke, desto besser gefällt mir diese opt-Geschichte. Vielleicht sollte ich die ISO mal fragen, was sie davon halten. Dann kann ich ja auch gleich mal nachfragen, ob sie keine Lust haben, Konstruktordelegation einzuführen...
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
033
15.08.2003, 13:53 Uhr
virtual
Sexiest Bit alive
(Operator)


Naja, aus unserer Diskussion wurde wohl klar, daß die ISO das garnicht aufnehmen kann, weil es eine inkompatible Änderung geben würde:

C++:
const char* arg = "glob. def. arg.";

class A
{
public:
    const char* arg; //Wird in der Implemantion zB gefüllt mit "loc. def. arg.";
    
    f(const char* x = arg) { std::cout<<arg<<std::endl; }
};

...
A a;
a.f();


Würde ja nach Deiner Idee eine andere Ausgabe machen als der Standard. Und deshalb gleich eine neue Sprache zu entwicklen würde auch keiner wollen.
Vielleicht im nächsten Leben.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)

Dieser Post wurde am 15.08.2003 um 13:54 Uhr von virtual editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
034
15.08.2003, 13:57 Uhr
0xdeadbeef
Gott
(Operator)


Ich meinte jetzt eigentlich mehr die opt-Geschichte. Das könnte man einführen, ohne inkompatibel zu werden.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
035
15.08.2003, 14:19 Uhr
virtual
Sexiest Bit alive
(Operator)


Ja, das fände ich auch gut. Ich würde allerdings auf das schlüsselwort opt verzichten und stattdessen sowas zulassen:

C++:
/* .h */
void f(const char* =)
/* .cpp */
void f(const char* x = "Hallo")
{
}


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)

Dieser Post wurde am 15.08.2003 um 14:25 Uhr von virtual editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
036
15.08.2003, 14:38 Uhr
0xdeadbeef
Gott
(Operator)


Meinetwegen auch das. Von der Grammatik her ist das ja isomorph.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] [ 2 ] [ 3 ] > 4 <     [ 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: