Vorsicht bei der Parameterdefinition in Klassen (OOP)

 

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.

 

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.

 

@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.

 
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

 
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. :)
Grund der Beschwerde: