Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

1

10.01.2007, 08:37

Frage zu Klassen

also die frage richtet sich jetzt nicht direkt an klassen, sondern eher an die memberfunktionen..

mal angenommen ich schreibe eine rekursive memberfunktion...
oder angenommen ich rufe eine funktion in einer anderen auf, ist auch egal..

man könnte das jetzt so schreiben:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
int CRational::ggt (int zaehler, int nenner)
{
    if (nenner == 0)
        { return zaehler; }
    else
        { return CRational::ggt(nenner, zaehler % nenner); }

    return 0;
}; // ggt();


aber auch so:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
int CRational::ggt (int zaehler, int nenner)
{
    if (nenner == 0)
        { return zaehler; }
    else
        { return ggt(nenner, zaehler % nenner); }

    return 0;
}; // ggt();


ist es egal ob ich beim aufruf der funktion zusätzlich "CRational::" angebe? ist das dem compiler komplett egal? oder gibts da einen unterschied? oder ist das nur eine frage zwischen guten und schlechten programmierstil?
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

10.01.2007, 08:57

Das funktioniert um dem Compiler mitteilen zu können welche Funktion der Programmierer aufgerufen haben will, siehe hierzu ein Beispiel:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Base
{
public:
    void foobar() const
    {
        std::cout << "Base::foobar() const" << std::endl;
    }
};

class Derived
    : private Base
{
public:
    void foobar() const
    {
        std::cout << "Foobar forward aus Derived" << std::endl;
        Base::foobar();
    }
};


Wenn man jetzt eine Instanz von Derived erzeugt und für diese foobar aufruft so wird man an die korrekte Funktion, nämlich Base::foobar(), weitergeleitet.

C-/C++-Quelltext

1
2
3
4
5
int main()
{
    Derived foo;
    foo.foobar();
}


Hätte man nicht die Möglichkeit den Klassennamen vor die Funktion zu setzen, so könnte der Compiler nicht entscheiden welche Funktion aufgerufen werden sollte, bzw er würde einer eine höhere Priorität gegeben, nämlich der falschen.
Der vorangestellte Klassenname ermöglicht also eine Unterscheidung von überdeckten Funktionen.

In deinem Fall ist das aber egal.

grüße
@D13_Dreinig

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

3

10.01.2007, 09:44

jaja, das ist mir schon klar..

aber mal angenommen ich ruf eine memberfunktion einer klasse, in der klasse selbst auf (zb rekursive funktion)

ist es dann nötig das anzugeben?

C-/C++-Quelltext

1
2
3
4
5
void CClass::Func (void)
{
        // Blah ..

    CClass::Func();
}

ich mein, .. man kanns weglassen.. aber sollte man es weglassen? oder ist das egal? oder dient es nur der lesbarkeit usw.?
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

4

10.01.2007, 09:46

Zitat von »"$nooc"«

jaja, das ist mir schon klar..


Die scheint's eben nicht klar zu sein. Wie gesagt, es ist egal, in deinem Fall. Ein rekursiver Funktionsaufruf ist schließlich auch nur ein Funktionsaufruf, der wird behandelt wie alle anderen auch.
@D13_Dreinig

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

5

10.01.2007, 09:50

ok.. ^^
also ist es eine frage des stils?
würde man das als guten oder schlechten stil bezeichnen?
oder is das ganze einfach nur vollkommen unnötig..
um ehrlich zu sein ich finde es ein klein wenig lesbarer ..
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

6

10.01.2007, 09:52

Ich halte das für unnötig, unnütz, unschön, ... Im Endeffekt kannst dus gern machen, aber wozu? Wenn du nicht explizit angibst welche Funktion aufgerufen werden soll dann gehst du davon aus das die Funktion ein Member deiner Klasse ist oder einer Basisklasse.

Aber wenn das natürlich Bestandteil deines "Programmstils" ist und du dir damit keine Fallen baust (könnte ja sein), dann machs doch einfach. Es bringt aber nichts!
@D13_Dreinig

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

7

10.01.2007, 09:58

ok.. :)

danke für eure auskünfte
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

8

10.01.2007, 09:59

Zitat von »"$nooc"«

ok.. :)

danke für eure auskünfte


Gerne! Immer wieder schön in der Mehrzahl angesprochen zu werden!
@D13_Dreinig

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

9

10.01.2007, 10:15

oh ^^

ich dachte die erste antwort war jem. andres *g*
:lol:

sorry :P


danke DIR *hrhr*
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

10

10.01.2007, 12:31

Es ist eben keine Frage des Stils, sondern ist nützlich wenn man auf eine Methode zugreifen will, die von einer abgeleiteten Klasse überschrieben wurde. David_pb hat das sehr schön bereits in seinem ersten Post gezeigt. Schau das dir nochmal genauer an.

Werbeanzeige