Frage zu klasse
-
so gehts
#include <iostream> using namespace std; class math{ public: static int cosinus(int x){ return x; } static int sinus(int x){ return x; } }; int main() { cout<<math::cosinus(4); }
-
In Sprachen wie C# und Java ist man dazu gezwungen alle Funktionen als Methoden (also innerhalb von Klassen) zu implemetieren. C++ ist mächtiger, weil man da nicht zwangsläufig Klassen braucht, was Sinn macht, da manche Funktionen einfach keiner Klasse zugeordnet werden müssen.
Statische Klassen in C++ sind also sinnlos, dafür nutzt man einfach freie Funktionen und gut ist. Wenn man Kapselung ermöglichen möchte, kann man z.B. anonyme namespaces verwenden. Im eigentlich Sinne ist eine Klasse aber dafür gedacht, daraus Objekte zu basteln. Statische Klassen widersprechen daher meines Erachtens der Grundidee. Dass das in C# und Java keinen interessiert, ist ja eine andere Sache.
-
so gehts
Nö in C# wird mit dem Punktoperator zugegriffen. Bei deiner Variante kannst du auch gleich einen Namespace nehmen.
-
Wozu eine Klasse, wenn alle Methoden darin static sind? Ersetze
classdurchnamespaceund du hast die C++ Lösung, die übrigens Seldon auch schon vorgeschlagen hat.
-
ich find das gar nicht sinnlos.
Ich möchte alle mathematischen Funktionen in einer Klasse bündeln.
Das Intelisense zeigt mir dann auch gleich an welche funktionen es gibt.
So gesehen find ich statische methoden sehr gutund ok namespace ist noch besser weil man dann nicht immer static schreiben muss

-
blurry333 schrieb:
ich find das gar nicht sinnlos.
Ich möchte alle mathematischen Funktionen in einer Klasse bündeln.
Das Intelisense zeigt mir dann auch gleich an welche funktionen es gibt.
So gesehen find ich statische methoden sehr gutIntellisense funktioniert auch mit namespaces. Darum ist die Klasse sinnlos.
Mal ganz davon abgesehen, dass es Funktionen für sinus und cosinus schon in cmath gibt.
-
blurry333 schrieb:
Ich möchte alle mathematischen Funktionen in einer Klasse bündeln.
Eine Klasse bringt für dieses Beispiel nichts. Sie verwirrt nur, weil man sie instanziieren oder von ihr ableiten kann. Was hier aber keinen Sinn macht.
Nimm einen Namensraum.
-
Grundsätzlich sind in C++ Klassen nicht zum Bündeln von Funktionen da. Klassen sollen Attribute kapseln und die Zugriffsmethoden dienen nur dazu, diese in angemessener Form zu manipulieren oder auszulesen.
Da "Mathematik" keine Attribute hat (PI wäre eine statische Konstante, das zählt also auch nicht), gehört das eben nicht als Klasse.
-
Eisflamme schrieb:
Da "Mathematik" keine Attribute hat (PI wäre eine statische Konstante, das zählt also auch nicht), gehört das eben nicht als Klasse.
Wäre doch gar nicht mal so unhübsch, eine Zahlenklasse zu haben. Dann würde man schreiben 90.sin() oder 5.plus(3)
. Das wäre immerhin konsequent objektorientiert, das sollte man auf jeden Fall in Java einbauen und verpflichtend machen.
-
Das ist ja was andres, aber ja, das wäre zur Abwechslung Mal ein hübscher Nebeneffekt des OOP-Fanatismus.
