494 Stimmen

Was sind die Unterschiede zwischen struct und class in C++?

Diese Frage war die bereits im Zusammenhang mit C#/.Net gestellt wurden .

Jetzt würde ich gerne die Unterschiede zwischen einer Struktur und einer Klasse in C++ kennenlernen. Bitte erörtern Sie die technischen Unterschiede sowie die Gründe für die Wahl des einen oder des anderen im OO-Design.

Ich werde mit einem offensichtlichen Unterschied beginnen:

  • Wenn Sie nicht angeben public: o private: Die Mitglieder einer Struktur sind standardmäßig öffentlich; die Mitglieder einer Klasse sind standardmäßig privat.

Ich bin sicher, dass es noch weitere Unterschiede gibt, die in den obskuren Ecken der C++-Spezifikation zu finden sind.

5voto

  1. Die Mitglieder einer Struktur sind standardmäßig öffentlich, die Mitglieder einer Klasse sind standardmäßig privat.
  2. Die Standardvererbung für Structure von einer anderen Struktur oder Klasse ist public, die Standardvererbung für Class von einer anderen Struktur oder Klasse ist private.

    class A{
    public:
    int i;
    };

    class A2:A{
    };

    struct A3:A{
    };

    struct abc{
    int i; };

    struct abc2:abc{
    };

    class abc3:abc{ };

    int _tmain(int argc, _TCHAR* argv[]) {
    abc2 objabc; objabc.i = 10;

    A3 ob;
    ob.i = 10;
    
    //A2 obja; //privately inherited
    //obja.i = 10;
    
    //abc3 obss;
    //obss.i = 10;

    }

Dies ist auf VS2005.

4voto

Stefan Popescu Punkte 65

Ein weiterer wesentlicher Unterschied besteht bei den Vorlagen. Soweit ich weiß, können Sie eine Klasse verwenden, wenn Sie eine Vorlage definieren, aber NICHT eine Struktur.

template<class T> // OK
template<struct T> // ERROR, struct not allowed here

4voto

KPexEA Punkte 16174

Eine andere Sache zu beachten, wenn Sie eine Legacy-Anwendung, die Strukturen, um Klassen verwenden Sie in das folgende Problem laufen könnte aktualisiert hatte:

Der alte Code hat Strukturen, der Code wurde bereinigt und diese in Klassen umgewandelt. Eine oder zwei virtuelle Funktionen wurden dann der neuen aktualisierten Klasse hinzugefügt.

Wenn virtuelle Funktionen in Klassen enthalten sind, fügt der Compiler intern zusätzliche Zeiger zu den Klassendaten hinzu, die auf die Funktionen verweisen.

Wie dies alte Legacy-Code brechen würde, ist, wenn im alten Code irgendwo die Struktur mit memfill gelöscht wurde, um es alle auf Nullen zu löschen, würde dies die zusätzlichen Zeigerdaten als auch stampfen.

4voto

MSalters Punkte 166675

Nicht in der Spezifikation, nein. Der Hauptunterschied liegt in den Erwartungen der Programmierer, wenn sie Ihren Code in 2 Jahren lesen. structs werden oft als POD angenommen. Structs werden auch in der Template-Metaprogrammierung verwendet, wenn Sie einen Typ für andere Zwecke als die Definition von Objekten definieren.

2voto

Gregory Pakosz Punkte 66918

ISO IEC 14882-2003

9 Klassen

§3

Eine Struktur ist eine Klasse, die mit der klasse-schlüssel struct seine Mitglieder und Basisklassen (Klausel 10) sind standardmäßig öffentlich (Klausel 11).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X