Dieser Quellcode zeigt die grundlegende Verwendung und Aufbau von
Klassen innerhalb der objektorientierten Programmierung mit C++. Dieses
Beispiel zeigt eine Klasse zum Thema: Mathematischer Bruch!
// ************************************************************************************************
// Autor/en: http://www.online-vba.de - Marc Wershoven
// Verwendung der Quelltexte auf eigene Gefahr!
// Es gelten die Nutzungsbedingungen von www.Online-VBA.de!
// Original-Quelltext: www.online-vba.de/cpp_klassen1.php
// ************************************************************************************************
#include <stdio.h>
#include <stdlib.h>
// * * * KLASSENDEFINITION * * *
class bruch
{
private:
int z,n,element; //ATTRIBUTE
static int des_count; //STATISCHE VARIABLEN IN CLASSES
static int elemente_count;
static int kon_count;
public:
bruch(int,int); //KONSTRUKTOR
~bruch(); //DESTRUKTOR
gebeaus(); //FUNKTIONEN-METHODEN
setze(int,int);
void bruch::kuerzen();
int bruch::ggt(int a, int b);
};
int bruch::des_count=0; //STATISCHE VARIABLEN IN CLASSES
int bruch::kon_count=0;
int bruch::elemente_count=1;
// * * * PROTOTYPEN * * *
void bruchtest1(bruch blok);
void bruchtest2(bruch * blok);
bruch bruchtest3(bruch blok);
// * * * HAUPTPROGRAMM * * *
void main()
{
bruch b1(1560,3330);
bruch b2(0,0);
bruchtest1(b1);
bruchtest2(&b1);
printf("Aufruf der Funktion 'kuerze' fuer B1.\n");
b1.kuerzen();
b1.gebeaus();
printf("Call by Value Funktionsaufruf mit Rueckgabetyp bruch.\n");
b2=bruchtest3(b2);
b2.gebeaus();
//DYNAMISCHE FELDER...
bruch * barray;
barray =(bruch*)malloc(10*sizeof(bruch));
barray[1].setze(10,10);
printf("Ausgabe Feldplatz[1]: ");
barray[1].gebeaus();
printf("Hauptprogramm Ende...\n");
}
// * * * ALLGEMEINE FUNKTIONEN * * *
void bruchtest1(bruch blok)
{
printf("Call by Value Uebergabe: ");
blok.gebeaus();
}
void bruchtest2(bruch * blok)
{
printf("Call by Referenze Uebergabe: ");
blok->gebeaus();
//(*blok).gebeaus();
}
bruch bruchtest3(bruch blok)
{
printf("Nenner = 111 sowie Zaehler = 111 -> per Funktion\n");
blok.setze(111,111);
return blok;
}
// * * * FUNKTIONEN DER KLASSE * * *
bruch::gebeaus()
{
printf("Zaehler ist %i, Nenner ist %i\n",z,n);
}
bruch::bruch(int wert1, int wert2)
{
kon_count++;
element=elemente_count;
elemente_count++;
printf("%i Konstruktoren aufgerufen fuer Element %i\n", kon_count, element);
z=wert1;
n=wert2;
}
bruch::~bruch()
{
des_count++;
printf("%i Destruktoren fuer %i - Werte sind z=%i, n=%i\n",des_count,element,z,n);
}
bruch::setze(int wert1, int wert2)
{
printf("Werte fuer Element %i werden neu gesetzt...\n",element);
printf("Element Nummer %i - neue Nummer %i.\n",element, elemente_count);
element=elemente_count;
elemente_count++;
z=wert1;
n=wert2;
}
void bruch::kuerzen()
{
int wert=ggt(z,n);
printf("Groesster gemeinsamer Teiler des Bruches ist %i\n",wert);
z /= wert;
n /= wert;
if (n<0)
{z=-z;n=-n;}
}
int bruch::ggt(int a, int b)
{
if (b==0)
return a;
else
a=ggt(b,(a%b));
return a; //wegen Compiler-Warnung eingefügt -> Rekursive Lösung
}