Anzeige

VBA
Programmierer
gesucht?
 
Anzeige
VBA Programmierer gesucht?
 

Einfache C/C++ Beispiele für Einsteiger

Einfaches Beispiel: Klassen und Objektorientierung

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
}



Autor: Marc Wershoven (2001)

Zum Seitenanfang