Nicht-statische Funktionseinträge in C++ [] (Nicht-statische Funktionseinträge in C++), Lektion, Seite 723351
https://www.purl.org/stefan_ram/pub/nichtstatische_c++ (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
C++-Kurs

Nicht-statische Funktionseinträge in C++ 

Die Definitionen der in der vorigen Lektion behandelten Funktionen für Objekte der Klasse »::pair« können auch in den Klassenspezifizierer  geschrieben werden.

Da diese Funktionen hauptsächlich für Objekte der Klasse »::pair« gedacht sind, ist es sinnvoll, ihre Zugehörigkeit zu jener Klasse zum Ausdruck zu bringen. Dazu können sie direkt in den Klassenspezifizierer  geschrieben werden.

main.cpp

#include <iostream>
#include <ostream>

struct pair
{ double x;
double y;

void set
( ::pair & p,
double const x,
double const y )
{ p.x = x;
p.y = y; }

void add
( ::pair & p,
::pair const & q )
{ p.x += q.x;
p.y += q.y; }

pair sum
( ::pair p,
::pair const & q )
{ p.::pair::add( p, q );
return p; }

void print
( pair const & p )
{ ::std::cout << p.::pair::x << '\n';
::std::cout << p.::pair::y << '\n'; }};

int main()
{ ::pair p;
::pair q;
p.::pair::set( p, 2, 3 );
p.::pair::set( q, 1, 4 );
p.::pair::print( p.::pair::sum( p, q )); }

::std::cout
3
7

Die wie oben im Klassenspezifizierer definierten Funktionen nennen wir auch nicht-statische Funktionseinträge  der Klasse (kurz auch: nicht-statische Funktionen ). Es handelt sich dabei um Funktionen, welche direkt im Klassenspezifizierer deklariert und nicht  mit dem Schlüsselwort »static« gekennzeichnet sind. Solche Funktionen gelten als Bestandteil jedes Objektes ihrer Klasse.

Um solch eine nicht-statische Funktion aufzurufen, muß ein Objekt jener Klasse und ein Punkt ».« vor die Angabe der Funktion geschrieben werden. Dies kann man in dem obigen Programm sehen, beispielsweise im Ausdruck »p.::pair::add( p, q )«. In dem obigen Programmbeispiel ist es egal, ob wir »p« oder »q« vor den Punkt schreiben. Hauptsache dort steht ein Objekt der Klasse, zu welcher die nicht-statischen Funktionen gehören. Jenes Objekt der Klasse, zu welcher die nicht-statischen Funktionen gehören, nennen wir auch das Zielobjekt  des Aufrufs.

Dasselbe Programm ohne vollständig-qualifizierte Bezeichner:

main.cpp

#include <iostream>
#include <ostream>

struct pair
{ double x;
double y;

void set
( pair & p,
double const x,
double const y )
{ p.x = x;
p.y = y; }

void add
( pair & p,
pair const & q )
{ p.x += q.x;
p.y += q.y; }

pair sum
( pair p,
pair const & q )
{ p.add( p, q );
return p; }

void print
( pair const & p )
{ ::std::cout << p.x << '\n';
::std::cout << p.y << '\n'; }};

int main()
{ pair p;
pair q;
p.set( p, 2, 3 );
p.set( q, 1, 4 );
p.print( p.sum( p, q )); }

::std::cout
3
7

Wir werden im weiteren Verlauf des Kurses die Schreibweise ohne vollständig-qualifizierte Bezeichner bevorzugen.

Semikolons

Funktionsdefinitionen in einem Klassenspezifizierer werden, anders als bei Felddefinitionen, nicht  mit einem Semikolon abgeschlossen.

C++  2015 (vereinfacht)
 member-declaration 〉 ::=
[〈 attribute-specifier-seq 〉] [〈 decl-specifier-seq 〉] [〈 member-declarator-list 〉] ';' |
 function-definition 〉.

Hinter dem Klassenspezifizierer selber steht weiterhin ein Semikolon (damit aus dem Klassenspezifizierer eine Deklaration wird).

C++  2015 (vereinfacht)
 declaration 〉 ::=
 class-specifier 〉 ';'.

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram723351 stefan_ram:723351 Nicht-statische Funktionseinträge in C++ Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd723351, slrprddef723351, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/nichtstatische_c++