grundlegende übergangspriobleme von c nach c++

  • hallo erstmal!
    also mal kurz zur erläuterung^^ ich studiere elektrotechnik und in unserem studium behandeln wir natürlich auch die programmiersprachen c und c++. angefangen haben wir mit der c- programmierung, wo ich bisher nichts sooooo große probleme mit hatte bzw. selbst auf antworten gekommen bin. nun mein problem: wir haben die erste übung für den übergang von c nach c++ bekommen. hier mal der quellcode:

    #include<stdio.h>
    #include<stdlib.h>


    void main()
    {
    int emil_day,emil_month,emil_year;
    int hugo_day,hugo_month,hugo_year;
    int emil_is_aelter;
    long int emil_tage,hugo_tage;
    char datstr[10];
    int i;
    char monstr[12][4]={"Jan","Feb","Mar","Apr","Mai","Jun","Jul",
    "Aug","Sep","Okt","Nov","Dez"};

    //geburtsdatum, emil eingeben
    printf("Eingabe des Geburtsddatums von Emil im Format dd-mm-yy\n");
    scanf("%s",datstr);
    for(i=0;i<9;i++) if(datstr[i]=='-') datstr[i]=' ';
    sscanf(datstr,"%d %d %d",&emil_day,&emil_month,&emil_year);
    emil_month=emil_month-1;

    //geburtsdatum, hugo eingeben
    printf("Eingabe des Geburtsddatums von Hugo im Format dd-mm-yy\n");
    scanf("%s",datstr);
    for(i=0;i<9;i++) if(datstr[i]=='-') datstr[i]=' ';
    sscanf(datstr,"%d %d %d",&hugo_day,&hugo_month,&hugo_year);
    hugo_month=hugo_month-1;

    // Geburtsdatum, emil ausgeben
    printf(" Det Jeburtsdatum von Emil is %dter - %s - %d \n",
    emil_day,monstr[emil_month],emil_year);

    // Geburtsdatum, hugo ausgeben
    printf(" Det Jeburtsdatum von Hugo is %dter - %s - %d \n",
    hugo_day,monstr[hugo_month],hugo_year);


    //Zwei Geburtsdaten vergleichen
    emil_tage=emil_day+31L*emil_month+373L*emil_year;
    hugo_tage=hugo_day+31L*hugo_month+373L*hugo_year;
    if(emil_tage<hugo_tage) {
    emil_is_aelter=1;
    } else {
    emil_is_aelter=0;
    };
    if(emil_is_aelter) {
    printf(" Emil ist aelter \n");
    } else {
    printf(" Emil ist vielleicht doch nicht aelter \n");
    };


    }

    soweit so gut. unsere aufgaben dazu wären:
    1.Identifizieren Sie ein Objekt "Datum" mit Daten und Funktionen
    2.Definieren Sie die Daten einer Klasse CDatum mit Standardtypen. Die Daten sind als “private” zu deklarieren.
    3.Definieren Sie die Operationen einer Klasse CDatum als Funktionsprototypen
    4.Realisieren Sie diese FunktionenErstellen die einen Default Konstruktor, einen Konstruktor, der eine Initialisierung mit einem bestimmten Datums-Wert erlaubt und einen leeren Destruktor
    5.Schreiben Sie ein Testprogramm, welches sämtliche Funktionen aufruft und in der Funktionalität in etwa dem Beispielprogramm Date1.cpp entspricht. Vpon einer exakten Nachbildung der Funktionalität des ausgangsprogrammes kann im Sinne eines objektorientierten Programmaufbaues abgewichen werden.
    6.Zeigen Sie im Testprogramm, daß das aufrufende Programm keinen Zugriff auf die privaten Daten der Klasse CDatum hat


    so, habe mich natürlich versucht nen bissl zu belesen. aba ich glaube bei mir haperts momentan an der logik. ich find da einfach kein objekt in dem quellcode, zumindest bin ich mir net wirklich sicher. genauso, wüsste ich jetzt net wenn cih eine klasse erstelle, was och dort als daten bzw. funktionen nehmen sollte. und aufgabe 4 bereitet mir ein regelrechtes kopfzerbrechen:confused: und überall steht das gleiche zu konstruktoren und destruktoren. alles schön udn gut aba je mehr ich lese desto verwirrter erscheint die ganze angelegenheit^^


    also, wie ihr seht, ich brauch echt hilfe.^^ (wer hätte das geahnt^^) vllt macht sich auch wer die mühe das programm einzeln außereinander zunehmen für mich oder einiges vllt in seinen "einfachen" worten zu erklären^^.....vllt hilfts ja schon.
    danke schonmal im voraus.


    grüße musik

  • Also ersmal:
    main hat den Rückgabetyp int, in C wie in C++. ;)
    Dass es noch kein Objekt gibt, siehst du richtig.^^ Du musst dich wohl mit objektorientierter Programmierung befassen, klick dich dazu mal durch die Links auf dieser Seite. Dort solltest du genug Online-Einführungen finden. Wenn du weißt, wie man eine Klasse erstellst, kannst du erst damit fortfahren. ;) Kleiner Hinweis: Es heißt ja, dass du die Daten private deklarieren sollst, das heißt du musst Methoden schreiben, die nur dafür da sind, die Daten zurückzugeben. ;)

    Du solltest dich auch ein wenig mit der Standardbibliothek befassen, diese Strings aus C solltest du z. B. nicht mehr verwenden, stattdessen C++-Strings, die Arrays kannst du erstmal weiter benutzen. Ich empfehle auch das Buch C++-Primer, falls du nicht schon genügend Lektüre hast. ;)

    Viele liebe Grüße
    The User

  • hehe.....also haben professoren doch ihre fehler?:D
    ich habe da gesucht und geschaut nach den objekten und mich immer mehr gefragt, wo soll ich da objekte finden. naja schon mal gut zu wissen, dass ich doch noch net so positiv durcheinander bin^^

    ok also erstmal danke für die hilfe werd mir die tutorials mal anschauen. als du sagst dass main int ausgibt, dass das void vor main falsch ist? oder versteh ich das grad nur falsch?

    omg .....es gibt unterschiede bei den strings zwischen c und c++? :eek: aaaaaaaaaahhhhhhhhhhh........^^

    kannst mir vllt auch ansätze geben, wie ich auf eine lösung bei der aufgabe komme? also gedanken die man sich machen sollte bei klassenprogrammierung oder so? da gibts doch sicherlich nen trick?!^^

    grüße musik

  • Also ich fang mal an:
    main hat den Rückgabetyp int, also es muss so aussehen:

    Code
    int main(int argc, char** argv)
    {
      ...
      return 0;
    }


    Die Parameter brauchst du nicht unbedingt (also argc und argv kannst du weglassen), das sind einfach Kommandozeilenparameter, aber auf jeden Fall im Erfolgsfall 0 und sonst eine andere Zahl zurückgeben, du hast doch bestimmt schonmal erlebt, dass ein Programm abgestürzt ist und irgendwie Fehler -1 oder so zurückgegeben hat. ;)

    Die Strings aus C werden in C++ genauso übernommen, jedoch ist es elganter, die strings aus der Standardbibliothek zu verwenden.
    Sie sind sicherer vor Speicherlecks und mit ihnen kann man mehr Sachen anstellen, noch eine Sache sind cin und cout zur Ein-/Ausgabe, printf und so können aber weiterhin verwendet werden:

    Ich hoffe das hilft bei den Anfängen. ;)
    Zur OOP musst du wirklich mal ein Tutorial lesen, das geht nicht so eben, aber wenn du das getan hast, wirst du diese Tips umzusetzen wissen:
    Durch private kann man auf ein Element nicht zugreifen, z. B.:

    Code
    private:
      int date;


    Du brauchst dann einen Getter:

    Code
    public:
      int GetDate(void)
      {
        return this->date;
      }


    Aber du musst das wirklich ausführlich lernen.

    Auf jeden Fall kamen in dem Code oben keinerlei Objekte oder Klassen vor, nonimma ein struct aus C. ;)

    Viele liebe Grüße
    The User