Anzeige:
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 15 von 18

Thema: C versus C++

  1. #1
    Registrierter Benutzer
    Registriert seit
    24.06.2002
    Ort
    Ober-Ramstadt
    Beiträge
    59

    Question C versus C++

    Hi,
    also ich bin jetzt mal so ein bißchen von C auf C++ umgestiegen und muss sagen dass mit der OOP Vorteil bei der eigentlichen Programmiererei nicht wirklich einleuchtet. Der Vorteil liegt wohl eher in der Erzeugung von Objekten für graphische Apps oder für Objekte als eine Art Container bei Datenbankzugriffen/Dateizugriffen. Die Dateizugriffe sind dann aber auch schon weniger geeignet.

    Ist das wirklich alles was OOP bietet. Ich bin einwenig enttäuscht weil ich mit als IMP-Programmierer eigentlich mehr versprochen habe.

    Gruß tiris
    In a world wothout fences, who
    needs Gates?

  2. #2
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    C++ bringt ja nicht nur Klassen.

    C++ bringt erhöhte Typsicherheit, Abstraktion, Namesräume, etc.

    Durch die Klassen wird auch die Aufrechterhaltung von Invarianten leichter.

    Wer C++ wie C mit Klassen benutzt, benutzt C mit Klassen und kein C++.

    OOP ist nur eine Möglichkeit die C++ bietet und überall dort Vorteile bringt, wo die Modellierung von Objekten der realen Welt erfolgt.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  3. #3
    Registrierter Benutzer
    Registriert seit
    24.06.2002
    Ort
    Ober-Ramstadt
    Beiträge
    59
    Aber die Typsicherheit zum Beispiel benutze ich ja nicht aktiv. Die habe ich eben. Der einzige Vorteil den ich aktiv benutzen kann ist demnach der Abstraktions- und Modellierungsfaktor, wenn ich deinen Quote richtig verstanden habe.

    gruß tiris
    In a world wothout fences, who
    needs Gates?

  4. #4
    Registrierter Benutzer
    Registriert seit
    17.09.2001
    Beiträge
    1.182

    Hmm....

    Ein einfaches Beispiel aus der "Praxis":

    Dein Programm muss beim Start eine Konfigurationsdatei einlesen und auswerten.
    In C könntest du dies wie folgt realiesieren, indem du eine Funktion schreibst, die z.B. einen Pointer auf eine Struktur zurückgibt, welche die Daten enthält.
    Dieser Funktion musst du wieder einen Haufen Parameter übergeben, oder vieleicht sogar das strukt allocieren...

    In C++ machst du einfach ein Object, sagts den Daietnamen, und kannst das Object selbst verwenden um an die Daten zu kommen.
    Sobald das Objekt erzeugt wird, leßt es die Daten ein, unst stellt diese mittels get/set zur verfügung.
    Die Klasse kannst du ohne die inneren Funktionen oder Abläufe zu kennen, auch in anderen Programmen benutzen.
    Weiters vereinfacht es dir den Programmaufbau enorm, da der "Glue-Code" der deine einzelnen Funktionsblöcke (hier im sinne von aufgaben) viel geringer und einheitlich wird.

    Ich hab mich auch am Anfang gefragt, für was OOP gut sein soll, außer für Widgets (GUIs).
    OOP braucht etwas "Einsickerzeit". Das kommt meistens stückchenweise, z.B. wenn man über ein Stück code stolpert, dass man analysiert und auf neue Ideen zur Verwendung von OOP in eigenen Projekten draufkommt. Am Anfang wirkt der dadurch entstehende Overhead eher nur lästig, aber mit der Zeit gewöhnt man sich ziemlich schnell daran und möchte die Vorzüge nicht mehr missen!
    Geändert von Lin728 (19-08-2017 um 23:03 Uhr)

  5. #5
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Original geschrieben von tiris
    Aber die Typsicherheit zum Beispiel benutze ich ja nicht aktiv.
    Ich finde die automtatischen Vorteile viel wichtiger, weil sie dir Arbeit abnehmen und damit auch die Möglichkeit für Fehler reduzieren.

    Beispiele für feine C++ Sachen:
    dynamic_cast: erlaubt dir sicherer Casts zu machen.

    operator overloading: eine Zuweisung ist eine Zuweisung, zwei komplexe Zahlen können mit der selben Syntax addiert werden wie primitive Datentypen, etc.

    standard container: du musst nicht jedesmal das Rad neu erfinden wenn du einen Container brauchst. Durch die Implementation als Template ist der Container trotz seiner Universalität typsicher.

    standard alogrithmen: warum soll man übliche Algorithmen jedes mal neu implementieren und dabei jedes mal neue Fehler einbauen.

    Zugegeben, die beiden letzten sind keine Features der Sprache C++ sondern der C++ Standard Bibliothek, aber die wird eben erst durch die Sprache C++ in dieser Form ermöglicht.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  6. #6
    Registrierter Benutzer
    Registriert seit
    21.07.2000
    Ort
    Österreich
    Beiträge
    189

    Re: Hmm....

    Original geschrieben von ceisserer
    Das kommt meistens stückchenweise, z.B. wenn man über ein Stück code stolpert, dass man analysiert und auf neue Ideen zur Verwendung von OOP in eigenen Projekten draufkommt.
    das problem ist meiner meinung dass in vielen büchern nur die anwendung von OOP erklärt ist, und nicht theroie dahinter (oder nur wenig).
    man sollte ich besser nochmals ein buch besorgen dass sich speziell mit OOP auseinanderesetzt (dass mus gar nicht genau auf eine sprache eingehen), dann dauert das einsickern nicht so lange.

    meine erfahrung:
    also ich bin student, und habe in den ferien vor diesem semester ein programm in C++/wxWindows geschrieben. dieses semester habe ich eine vorlesung gehabt welche sich _nur_ auf OOP bezieht. nun bin ich soweit dass ich das programm komplett neu schreiben will, denn was ich produziert habe war kein C++ programm sondern ein C programm im C++ style ...

  7. #7
    Registrierter Benutzer
    Registriert seit
    20.04.2001
    Beiträge
    159

    Re: Hmm....

    Original geschrieben von ceisserer

    In C++ machst du einfach ein Object, sagts den Daietnamen, und kannst das Object selbst verwenden um an die Daten zu kommen.
    Sobald das Objekt erzeugt wird, leßt es die Daten ein, unst stellt diese mittels get/set zur verfügung.
    Die Klasse kannst du ohne die inneren Funktionen oder Abläufe zu kennen, auch in anderen Programmen benutzen.
    und wo ist der Unterschied zu C? Da kann ich doch auch eine Funktion schreiben der ich nur den Dateinamen übergebe und sie dann die Daten einließt, so wie es dein Objekt macht. Dazu noch zwei Funktionen set und get die mir die Daten geben bzw. die Daten schreiben und ich habe im Prinzip das gleiche...

    Original geschrieben von anda_skoa
    operator overloading: eine Zuweisung ist eine Zuweisung, zwei komplexe Zahlen können mit der selben Syntax addiert werden wie primitive Datentypen, etc.
    Darin habe ich irgendwie nie so richtig einen Sinn/Vorteil gesehen. Ich finde es eher verwirrend wenn verschiedene Datentypen mit dem gleichen Operator verbunden werden. Da finde ich z.B. a=matrix_multiplikation(b, c); verständlicher. Hier weiß ich gleich was passiert und das ich den Algorithmus dazu in der Funktion matrix_multiplikation finde.

    "I could have made some money developing proprietary software, and perhaps amused myself writing code. But I knew that at the end of my career, I would look back on years of building walls to divide people, and feel I had spent my life making the world a worse place."
    -- Richard M. Stallman

    Wissenskommunismus und Wissenskapitalismus
    Offene Quellen und öffentliches Wissen
    und vieles mehr: VRG's Texts , Philosophy of the GNU Project

  8. #8
    Registrierter Benutzer
    Registriert seit
    24.06.2003
    Beiträge
    486

    Re: Re: Hmm....

    Original geschrieben von cybercrow

    Darin habe ich irgendwie nie so richtig einen Sinn/Vorteil gesehen. Ich finde es eher verwirrend wenn verschiedene Datentypen mit dem gleichen Operator verbunden werden.
    Dann siehst du auch keinn Sinn/Vorteil in Funktionsüberladung? (versch. Datentypen mit 'gleicher' Funktion verbunden)
    Da finde ich z.B. a=matrix_multiplikation(b, c); verständlicher.
    Ja,vielleicht.Aber was ist damit
    Code:
    a = matrix_mul(matrix_mul(a,matrix_add(b,c)),
           matrix_add(d,matrix_mul(e,f)));
    In scientific computing ist Operator-Overloading daher ein wichtiges Feature (ja auch Fortran hat Operator-Overloading),und auch einer der Gründe,warum Java in dem Bereich noch hinterherhinkt.

    Hier weiß ich gleich was passiert und das ich den Algorithmus dazu in der Funktion matrix_multiplikation finde.
    Den entsprechenden Operator finde ich genauso schnell.

  9. #9
    Registrierter Benutzer Avatar von Sym
    Registriert seit
    05.09.2002
    Ort
    Bremen
    Beiträge
    278

    Re: Re: Re: Hmm....

    Original geschrieben von wraith
    Ja,vielleicht.Aber was ist damit
    Code:
    a = matrix_mul(matrix_mul(a,matrix_add(b,c)),
           matrix_add(d,matrix_mul(e,f)));
    Was soll daran nicht zu verstehen sein?

    Aber Du hast das kürzen vergessen
    Code:
    1=matrix_mult(matrix_add(b,c),matrix_add(d,matrix_mult(e,f)));
    Aber zum Thema:

    An Deiner Stelle (Beitragsersteller - scrolle jetzt nicht nach dem nickname - hmm, bei so einem Text wäre scrollen sicher schneller) würde ich mir ein kleines Projekt vorgeben (Ampelschaltung, Kleines Matheprogramm mit Matrizen und Zahlenaddition, etc...) und es einfach mal mit C++ versuchen.

    Die Praxis hat mir gezeigt, warum OOP in den meisten Fällen gut ist.
    Denk mal drüber nach...

    Lars

    ACHTUNG: ersetze Linux durch GNU/Linux an den entsprechenden Stellen
    www.macuser.de, MSVC2005 Express und Qt, Qt/Mac installieren

  10. #10
    Registrierter Benutzer
    Registriert seit
    24.06.2002
    Ort
    Ober-Ramstadt
    Beiträge
    59
    Das mit dem konkreten Projekt hab ich ja gemacht und mich dann nach den Vorteilen gefragt.
    Ich wololte 2 Dateien vergleichen und die Schnittmenge dann in eine neue Datei schreiben. Unter C gings ganz einfach mit streams die ich laufen lasse und dann bei Übereinstimmung schreibe.
    Aber mit einer Klasse hab ich mir da die Finger wund getippt und es hat trotzdem nicht funktioniert.



    gruß tiris
    In a world wothout fences, who
    needs Gates?

  11. #11
    Registrierter Benutzer
    Registriert seit
    24.06.2003
    Beiträge
    486
    Original geschrieben von tiris

    Aber mit einer Klasse hab ich mir da die Finger wund getippt und es hat trotzdem nicht funktioniert.
    Tja,da hast du nur ein perfektes Bsp gebracht,wie man C++ nicht anwenden sollte.
    Es geht nicht darum,bei der OOP,und C++ speziell,alles in Klassen zu packen.

    K.A wie dein C Code aussieht,aber in C++ würde ich es so machen
    Code:
    //Reihe Includes
    int main(int args,char *argv[])
    {
    	ifstream fileIn1(argv[1]);
    	ifstream fileIn2(argv[2]);
    	ofstream fileOut(argv[3]);
    	
    	set_intersection((istreambuf_iterator<char>(fileIn1)),istreambuf_iterator<char>(),
    			(istreambuf_iterator<char>(fileIn2)),istreambuf_iterator<char>(),
    			 ostream_iterator<char>(fileOut));
    
    }

  12. #12
    Registrierter Benutzer
    Registriert seit
    24.06.2002
    Ort
    Ober-Ramstadt
    Beiträge
    59
    Ok,öffnen mit fopen() und fgetc über eine while-SChleife laufen lassen in C dauert länger.

    Ich denke das mit der Einwirkzeit könnte stimmen...


    gruß tiris
    In a world wothout fences, who
    needs Gates?

  13. #13
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Original geschrieben von wraith
    Tja,da hast du nur ein perfektes Bsp gebracht,wie man C++ nicht anwenden sollte.
    Es geht nicht darum,bei der OOP,und C++ speziell,alles in Klassen zu packen.
    Bei Java schon - aber auch dort kannst du alles in main() schreiben - zu OOP zwingt dich keiner.

    Das sollst du nur dort benutzen wo es etwas bringt. Herauszufinden wo und wie das am meisten bringt ist dann wohl die grosse Schwierigkeit.

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  14. #14
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Original geschrieben von tiris
    Ok,öffnen mit fopen() und fgetc über eine while-SChleife laufen lassen in C dauert länger.

    Ich denke das mit der Einwirkzeit könnte stimmen...
    Bis du sowas wie wraith(wledge?) aus dem Ärmel schütteln kannst, dauert es ziemlich lange.

    Dieser funktionale Ansatzt ist ziemliche "advanced"!

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  15. #15
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Original geschrieben von anda_skoa
    Bis du sowas wie wraith(wledge?) aus dem Ärmel schütteln kannst, dauert es ziemlich lange.

    Dieser funktionale Ansatzt ist ziemliche "advanced"!
    Dann bin ich ja beruhigt.

    Lassen wir das ein bisschen "Einwirken"...

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •