Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Frage zu Klassen und deren Nutzen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
12.09.2014, 11:02 Uhr
green



Hallo liebe Mitglieder,
Ich habe eine allgemeine Anfängerfrage zu c++, wenn man in c++ anfängt aus Büchern Programmbeispiele zu üben, merkt man, dass man eingentlich dieselben
einfachen Programme, die man in c mit Eingabe Ausgabe Ergebnis strukturiert hat,
plötzlich umständlich in Klassen und Funktionen aufteilt. Beispiel:


C++:
#include<iostream>
using namespace std;

class objekt {
private:
int breite,hoehe;
public:
void werteingabe(int,int);
int berechnung(){return breite*hoehe;}
};

void objekt::werteingabe(int x, int y){breite=x;hoehe=y;}

main(){
objekt blue;
blue.werteingabe(55,99);
cout<<"\nFlaeche:"<<blue.berechnung()<<"\n";
return 0;
}    



in klassichem C-Stil hätte man

C++:
Titel
int ... Variablen
Printf("Bitte Eingabe...");
scanf("....
Berechnung
Printf("
Ausgabe des Ergebnis...    



eine andere Struktur benutzt. Der Sinn dessen ist, soweit Ich das bisher sehe,
die main funktion bei größeren und komplexeren Projekten zu entlasten und
so die Programme übersichtlich zu gestalten. Man transferiert hier quasi auf
lange Sicht Programmthemen in Klassen und Objekte.
Da Ich selber zwar schon einige kleine C Programme aber keine großen c++ Programme geschrieben habe oder mich mit komplexen c++ Programmen/Anwendungen
auskenne, denke Ich, dass das so ist.

Jemand der in c++ professionelle Erfahrung hat müsste das sicher wissen ?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
12.09.2014, 16:00 Uhr
ao

(Operator)


Ich fang mal an:

1. Im allgemeinen sind Anfängerbeispiele wenig geeignet, um die Vorteile der OO (objektorientierten) Programmierung zu zeigen. Es ist im ersten Moment eine Menge syntaktischer Overhead, mit dem man sich rumschlagen muss, von dem man aber vorläufig nur wenig hat. Wirklich deutlich werden die Vorteile erst, wenn die Aufgabenstellung eine gewisse Komplexität erreicht.

2. OO heißt nicht nur Verwendung von Klassen. Das zweite Element, was genauso wichtig ist, ist Vererbung und Polymorphie. Das macht es möglich, nicht nur exakt gleiche Objekte zusammenzufassen, sondern auch "ähnliche" Objekte, die eine gemeinsame Schnittmenge haben.

Beispiel: Grafische Figuren, die auf den Bildschirm gezeichnet werden. Es gibt Rechtecke, Dreiecke und Kreise. Die gemeinsame Schnittmenge ist:
* eine Methode, die den Flächeninhalt bestimmt: float Area ();
* eine Methode, die die Figur an einer angegebenen Position zeichnet: void Draw (int x, int y);

Aus diesen beiden Elementen definiert man ein sogenanntes Interface und nennt es z.B. IShape. Hier kommen sogenannte "virtuelle Methoden" ins Spiel, das sind Platzhalter für tatsächliche Methoden. Als Vereinbarung gilt: Alles, was sich IShape nennen will, muss Code für diese beiden Methoden bereitstellen (man sagt auch "das Interface implementieren").

Dann definiert man drei Klassen (Rectangle, Triangle und Circle) und leitet alle drei von IShape ab. Damit das Ganze vollständig ist, programmiert man für jede der Klassen die Methoden Area und Draw aus (Implementierung).

Die tun von außen betrachtet in allen drei Klassen dasselbe (den Flächeninhalt berechnen bzw. die Figur zeichnen). Intern unterscheiden sie sich natürlich, weil die Flächenberechnung für Rechtecke, Dreiecke und Kreise nun mal unterschiedlich ist. Und die zum Malen nötigen Schritte auch.

Das nennt sich Polymorphie, und das ist genial. Ein Programm kann eine lange Liste von Shapes verwalten (über das Interface IShape - jede Figur ist ein Shape und kann über einen IShape-Pointer oder eine IShape-Referenz angesprochen werden) und braucht sich dabei nicht darum zu kümmern, welche Arten von Figuren das sind und wie sie gezeichnet werden. Das wissen die Figuren selber.

Das Hantieren mit den virtuellen Methoden erledigt der C++-Compiler. Und der kann auch prüfen, ob alles passt. In ein Array von IShape* kriegt man nur Objekte rein, die von IShape abgeleitet sind. Schummelt man da versehentlich was anderes rein, was nicht von IShape abgeleitet ist, gibts einen Fehler zur Compilezeit (nicht zur Laufzeit).

Das erhöht die Fehlersicherheit beträchtlich. Wenn der Compiler das abnickt, sind die Schnittstellen alle korrekt, und Fehler können nur noch in der Implementierung liegen, d.h. in relativ kurzen Codestücken, die man noch überblicken kann.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: