Vorsicht bei der Parameterdefinition in Klassen (OOP)

Einloggen oder registrieren, um einen Kommentar zu schreiben
Otto Pauser
1537
Otto Pauser  

Der Compiler überprüft, auch schon in Vorgängerversionen, die Parameterdefinitionen der Funktionen nur sehr mangelhaft!

Das kann zu schweren Fehlern führen! Sind auch oft schwer zu entdecken.

Beispiel:

class CTest
{
   public:
      void Test1(int,int);
      void Test2(int a, int b);
      void Test3(int a, int b);
};

void CTest::Test1(int a,int b)
{
   Print("Test1 a=",a," b=",b);
}

void CTest::Test2(int a, int b)
{
   Print("Test3 a=",a," b=",b);
}

void CTest::Test3(int b, int a)      // hier wurden die Parameternamen vertauscht
{
   Print("Test3 a=",a," b=",b);
}

CTest Test;

void OnStart()
{
   Test.Test1(1,2);
   Test.Test2(1,2);
   Test.Test3(1,2);
}

Ergebnis:


Auch die Überprüfung von Defaultwerten der Parameter ist äusserst mangelhaft.

-----------------------------------------------------------------------------------------------------

Einfach nur so, zu eurer Information.

lippmaje
806
lippmaje  

Das entspricht dem Verhalten von C, C++ und ich glaube auch C#.

Parameternamen in der Funktionsdeklaration werden zwar akzeptiert aber ignoriert.

Deklarationen wie

void Test3(int a, int b);

oder

void Test3(int foo, int blub);

oder

void Test3(int, int);

werden fehlerfrei kompiliert. Letztlich sind die angegebenen Parameternamen aber ohne Bedeutung. Nur die Parametertypen müssen mit der Funktion übereinstimmen.

Otto Pauser
1537
Otto Pauser  

@lippmaje: Danke für die Info!

Nachdem ich mit Lisp und Pascal aufgewachsen bin war mir das neu, obwohl ich mich bereits seit Jahren mit MQL befasse.

Halte ich weiterhin für eine große Gefahrenquelle, besonders bei Programmänderungen.

amando
1735
amando  
Otto Pauser:

@lippmaje: Danke für die Info!

Nachdem ich mit Lisp und Pascal aufgewachsen bin war mir das neu, obwohl ich mich bereits seit Jahren mit MQL befasse.

Halte ich weiterhin für eine große Gefahrenquelle, besonders bei Programmänderungen.

Also Otto, du überrascht mich immer wieder, jetzt hab ich doch mal nachsehen müssen was Lisp ist 😂😂😂😂

für alle anderen der next generation

https://de.m.wikipedia.org/wiki/Lisp

lippmaje
806
lippmaje  
Ich hatte einen Pascal Compiler für meinen ZX Spectrum 48K, UCSD glaube ich. Ich habe damit 3D Drahtmodelle visualisiert. Einen Wolf mit ca 300 Punkten. Alles von Hand ausgemessen und eingegeben. Meine Kunstlehrerin fand das Ergebnis ganz nett aber 1. das Bild war nicht ganz fertig und 2. Abgabetermin verpasst. :)
Einloggen oder registrieren, um einen Kommentar zu schreiben