PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C++ Funktionen überladen


Gast
2009-11-01, 21:54:14
Ich habe mal eine Frage zum Überladen von Funktionen.

http://www.math.uni-wuppertal.de/~axel/skripte/oop/oop7_5.html

da steht, dass der Compiler keinen Unterschied sieht, wenn Parameter Konstanten sind.

Mit void test(int); und void test(const int); deklariert man allerdings dieselbe Funktion. Die Angabe const ist eine Information über das Verhalten der Funktion, nicht über ihre Signatur.

Defakto kann G++/GCC hier doch unterscheiden:


int foo(int a[], const int& l) { return 0;}
int foo(int a[], int& l) { return 0;}


Hier wurde in neuren Verionen von GCC wohl doch angepasst?!

Zweite Frage:
Ich habe hier ein Übungsblatt, siehe hierzu http://www.math.uni-wuppertal.de/wrswt/ws09/oop/blatt02_ws09.pdf von meiner Uni, ich habe die Aufgabe zwar gelöst, wollte aber mal wissen, ob das wirklich die optimale Lösung war: (Aufgabe 5 ist hier Thema), Password vom PDF = obprows09


using namespace normal;
using namespace rechnen;

int main () {
int a[] = {1,2,3,4,5};
double b[] = {0.1, 0.2, 0.3, 0.4, 0.5};
char c[] = {'a','b','c','d','e'};

ausgeben(a,5,true);
ausgeben(b,5,true);
ausgeben(c,5,true);

normal::ausgeben(a,5);

return 0;
}

Coda
2009-11-01, 23:25:22
Bei Pointern und Referenzen wird zwischen const und nicht const unterschieden, bei Call-By-Value nicht.

Das ist auch klar, da das übergebene Objekt bei Call-By-Value sowieso nicht verändert werden kann von der Funktion. Bei den anderen beiden Varianten kann es aber verändert werden und deshalb muss man das logisch auch unterscheiden.