C-ähnliche Prozeduren in C ++?

8

Erfordert der Programmierstil C++ korrekt das Schreiben Ihres gesamten Codes mit Klassen oder sind C -ähnliche Prozeduren zulässig? Wenn ich jemand anderem Code geben würde, würde er als C++ akzeptiert werden, nur weil er std::vector und std::string (statt char * ) enthält oder alles muss eine Klasse sein?

zB:

%Vor%

Gibt es Fälle, in denen der Programmierer C -ähnliche Prozeduren in seinem Quellcode haben muss oder darf? Musstest du so etwas jemals machen?

Im Zusammenhang mit dieser Frage: Wo ist die Marge zwischen C und C++ (falls vorhanden)?

Ich hoffe, dass meine Frage klar und in Einklang mit den Regeln steht.

    
Muggen 01.04.2011, 00:53
quelle

6 Antworten

8

C ++ ist eine multiparadigmatische Sprache, in der OO, prozedurale, generische / generative und - zu einem geringeren (aber mit C ++ 0x ansteigendem Ausmaß funktional) - zu den Paradigmen gehören. Sie sollten das verwenden, was am besten zu dem Problem passt: Sie möchten, dass der Code leicht zu bekommen und richtig zu halten ist und schwer zu verstopfen.

Der Nutzen von Klassen besteht darin, Daten (Zustand) zusammen mit den zugehörigen Funktionen zu packen. Wenn Ihre Funktion wordify keinen Zustand zwischen Aufrufen beibehalten muss, müssen Sie keine Klasse / kein Objekt verwenden. Das heißt, wenn Sie vorhersagen können, dass Sie bald einen Zustand haben wollen, dann kann es nützlich sein, mit einer Klasse zu beginnen, damit sich der Client-Code nicht so viel ändern muss.

Stellen Sie sich beispielsweise vor, der Funktion einen Parameter hinzuzufügen, um festzulegen, ob die Ausgabe "first", "second" statt "one", "two" lauten soll. Sie möchten, dass das Verhalten einmal festgelegt und gespeichert wird. An anderer Stelle in der Anwendung kann jedoch auch ein anderer Code die Funktionalität verwenden, die andere Einstellung jedoch bevorzugen. Es ist eine gute Idee, einen Gegenstand zu verwenden, um den Zustand zu halten und ihn so anzuordnen, dass die Lebensdauer und Zugänglichkeit jedes Objekts mit dem Code übereinstimmt, der es verwenden wird.

BEARBEITEN:

  

Im Zusammenhang mit dieser Frage gibt es den Unterschied zwischen C und C ++ (falls vorhanden)?

C ++ bietet Ihnen einfach mehr Möglichkeiten, Ihre Programmieraufgaben zu bewältigen, und zwar mit den jeweils notwendigen Vor- und Nachteilen. Es gibt viele Zeiten, in denen der beste Weg immer noch derselbe ist, wie es in C gemacht worden wäre. Es wäre pervers für einen C ++ Programmierer, einen schlechteren Weg zu wählen, einfach weil es nur in C ++ möglich war. Solche Auswahlen existieren jedoch auf unzähligen Ebenen. Daher ist es üblich, eine Nicht-Memberfunktion anzugeben, die einen const std::string& -Parameter verwendet und den prozeduralen Funktionsaufruf mit objektorientierten Daten kombiniert, die von template generiert wurden. : Es funktioniert alles gut zusammen.

    
Tony Delroy 01.04.2011, 01:45
quelle
10

Es ist sicherlich in Ordnung, freie Funktionen in Ihrem Code zu haben - das ist eine Frage der Architektur, nicht von "++ ness". Für kleine Programme macht es nicht einmal Sinn, mit Klassen All-in zu gehen, da OO wirklich ein Werkzeug ist, um Komplexität zu verwalten. Wenn die Komplexität nicht zu Beginn ist, warum?

Ihre zweite Frage, wo die Linie gezeichnet ist, hat keine kurze Antwort. Die naheliegendste ist, dass die Linie überall dort gezeichnet wird, wo sich der C-Standard von dem für C ++ unterscheidet. Aber wenn Sie nach einer Liste von Hochsprachenfunktionen suchen, die C ++ hat und C nicht, hier sind einige von ihnen:

  • Klassenarten und OO (natürlich)
  • Die STL
  • Funktion / Operatorüberladung
  • Referenzen
  • Vorlagen
  • new / delete zum Verwalten von Speicher
Jon 01.04.2011 00:57
quelle
1

C ++ erlaubt eine Vielzahl von Programmierstilen, wobei prozeduraler Code einer davon ist.

Welcher Stil verwendet wird, hängt von dem Problem ab, das Sie lösen möchten. Der Abstand zwischen C und C ++ ist, dass Sie Ihren Code mit einem C ++ - Compiler kompilieren.

Ich verwende manchmal prozedurale Funktionen in meinem Code. Manchmal löst es am besten das Problem.

    
Nathanael 01.04.2011 00:56
quelle
1

C ++ - Code kann auch ohne Klassen noch gültiger C ++ - Code sein. Klassen sind eher ein Feature und werden nicht in jedem Code benötigt.

C ++ ist im Grunde C mit mehr Funktionen, also gibt es nicht wirklich einen "Spielraum" zwischen den zwei Sprachen.

    
slartibartfast 01.04.2011 00:58
quelle
1

Wenn Sie Stroustrups Design und Entwicklung lesen, werden Sie sehen, dass C ++ mehrere Programmierstile unterstützen sollte. Verwenden Sie das Problem, das am besten geeignet ist (nicht dasselbe wie immer nur das, das Sie kennen).

In älteren realen Anwendungen gibt es oft sehr wenig Unterschiede. Einige C ++ - Code wurde ursprünglich C-Code und dann neu kompiliert. Langsam migriert es, C ++ - Funktionen zu verwenden, um seine Qualität zu verbessern.

Kurz gesagt, ja, C ++ - Code kann prozedural sein. Aber Sie werden feststellen, dass es sich von C-Code unterscheidet, wenn Sie C ++ - Funktionen verwenden, wo es angebracht ist.

In einer guten Praxis müssen Dinge wie Kapselung, Testbarkeit und die Verständlichkeit der Client-API berücksichtigt werden.

    
Keith 01.04.2011 01:00
quelle
0
%Vor%     
bs2 01.04.2011 13:20
quelle

Tags und Links