2016-07-08 11 views
1

Ich bin bewusst, dass Struktur und Klasse in C++ sehr ähnlich sind und Struktur Mitglieder standardmäßig öffentlichen Zugriff haben, während die Mitglieder der Klasse privaten Zugriff und so weiter haben .. etc.Initialisieren von Klasseninstanz mit geschweiften Klammern

Da jedoch struct Instanzen wie folgt initialisiert werden kann:

struct MyStruct{ 
    int a; 
    int b; 
    int c; 
}; 

MyStruct s1 = {1, 2, 3}; //a=1, b=2, c=3 
MyStruct s2 = {}; //a=0, b=0, c=0 

Ist es sicher, das gleiche für Klassen in C++ zu tun? Zum Beispiel:

class MyClass{ 
    int a; 
    int b; 
    int c; 
}; 

MyClass c1 = {1, 2, 3}; //a=1, b=2, c=3 
MyClass c2 = {}; //a=0, b=0, c=0 

Frage: Ich bin mir bewusst, wir Konstruktor verwenden können (s), ist es Fallstricke sollte ich beachten, wenn ich Klasseninstanz wie struct Instanzen initialisiert werden? Ist dies eine sichere Operation, wenn ich diesen Ansatz verwende, um die Datenelemente auf ihre Standardwerte (z. B. 0 für int und null für Zeiger) zu initialisieren?

+3

In C++ gibt es keinen Unterschied zwischen einer Klasse und einer Struktur außer dem Standard-Zugriffsspezifizierer. – NathanOliver

+0

@NathanOliver So kann ich annehmen, dass es sicher ist, Klasseninstanzen mit den geschweiften Klammern zu initialisieren? – user3437460

Antwort

5

Der einzige Unterschied zwischen struct und class ist die Standard-Zugriffsspezifikation: MyClass hat drei private Mitglieder und MyStruct hat drei public diejenigen. Als Ergebnis (ist eine der Voraussetzungen, dass eine Klasse haben keine privaten oder nicht-statische Datenelemente geschützt) MyClass ist nicht ein Aggregat, das diesen Code macht schlecht gebildet:

MyClass c1 = {1, 2, 3}; // error 

Aber es gibt kein Unterschied zwischen Ihrer Initialisierung von MyStruct und was Ihre Initialisierung von MyClass gewesen wäre, wenn Sie die Mitglieder alle public gemacht hätten.

+0

Oh guter Punkt. Ich verpasste das OP nicht 'public:' in der Klasse. – NathanOliver

+0

@Barry Danke für Ihre Antwort. Wenn also alle Datenmitglieder von MyClass öffentlich sind, könnte ich sie einfach mit '= {1,2,3};' ohne große Sorgen initialisieren? – user3437460

+0

@ user3437460 Ja, wie in der Antwort erwähnt, würde es keinen Unterschied geben. – Barry