Единственное различие между class
и struct
это видимость Ваших членов, будучи членами struct
назначенная по умолчанию публика в то время как публика class
они лишены по умолчанию.
Препятствуя этому различию, оба сооружения равны:
struct A {};
class B {};
struct C : public A, public B {};
class D : public A, public B {};
Это подразумевает, что также у обоих могут быть виртуальные, виртуальные чистые функции, sobreescribir функции и использовать любой уровень наследства.
struct S
{
int publico; // miembro publico.
protected:
int protegido; // miembro protegido.
private:
int privado; // miembro privado.
};
class C
{
int privado; // miembro privado.
protected:
int protegido; // miembro protegido.
public:
int publico; // miembro publico.
};
В обоих случаях, если он не определится ясно, он будет создан автоматически:
struct S; // pre-declaracion de S
class C; // pre-declaracion de C
struct S { int i; }; // declaracion de S
class C { int i; }; // declaracion de C
Он хотел упомянуть об этой точке, потому что возможно пред-объявлять объект как class
и после объявлять это как struct
(и наоборот); большинство составителей это принимает, хотя они обычно показывают тревогу.
Класс и структура с теми же членами в том же порядке, займут то же самое в памяти и у них будут те же padding между членами.
struct S { char c; short s; int i; float f; double d; };
class C { char c; short s; int i; float f; double d; };
static_assert(sizeof(S) == sizeof(C)); // Verdadero!
В C ++ struct
и class
они - практически то же самое, с единственным различием, чем в одной struct
назначенные по умолчанию члены публичные и в одной class
по умолчанию они частные.
Одна struct
смоги содержать то же самое что одна class
, методы, строители, разрушители, наследство.
Помимо упомянутого в других ответах на теме видимости (тема, на которой я не буду комментировать, потому что уже он очень документировался в других ответах) есть второе различие между использованием struct
и class
и он в случае template
:
class
возможно использовать, чтобы объявлять типы для одного template
, в то время как struct
нет:
// ok
template<class T>
void func1(T t)
{ std::cout << t << '\n'; }
// ok
template<typename T>
void func2(T t)
{ std::cout << t << '\n'; }
// error
template<struct T>
void func3(T t)
{ std::cout << t << '\n'; }
class
внутри template не значит то же самое, что и class
, чтобы объявлять объекты ergo, aú n будучи тем же ключевым словом: они не то же самое.
– PaperBirdMaster
02.12.2016, 13:01
class
, чтобы определять типы в одном, сдержись он не подразумевает ни для чего, что этот тип был должен специализироваться с классом..., возможно настраивать с int
и он ничего не перемещает. Но оно не прекращает быть различием между обоими словами внутри C ++
– eferion
02.12.2016, 13:03
class
в контексте pará метр шаблон - по причинам histó богатые: не querí чтобы создавать другое ключевое слово (что в конце концов creó: typename
). Значение class
внутри шаблона отличается в тот class
вне этого контекста, así так как: это различные ключевые слова homó nimas.
– PaperBirdMaster
02.12.2016, 13:44
struct
и class
. Я не вижу, что был определен определенный контекст, потом не вижу, что ответ esté вне места
– eferion
02.12.2016, 13:52
struct
и class
, не между значениями обоих ключевых слов... в любом случае не сказал, что ответ esté вне места, если не, что class
в контексте объекта и контексте шаблона не то же самое.
– PaperBirdMaster
02.12.2016, 14:59
struct
илиclass
actú an того же способа. – PaperBirdMaster 05.12.2016, 09:51