Jogofus Asked: 2020-12-02 12:59:54 +0800 CST 2020-12-02 12:59:54 +0800 CST 2020-12-02 12:59:54 +0800 CST C++中结构体和类的区别 772 C ++中结构和类之间有什么区别?据我了解,结构是创建对象的 c++ 方式,就像 python 使用类一样。 c++ 3 Answers Voted Best Answer PaperBirdMaster 2020-12-03T00:10:46+08:002020-12-03T00:10:46+08:00 class和之间的唯一区别struct是其成员的可见性,默认情况下成员是struct公共的,而成员默认情况下class是私有的。 忽略这种差异,两种构造都是相同的: 两者都可以用于继承 struct A {}; class B {}; struct C : public A, public B {}; class D : public A, public B {}; 这意味着它们也可以同时具有虚函数、纯虚函数、覆盖函数和使用任何级别的继承。 两者都可以有公共、受保护和私有成员 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(反之亦然);大多数编译器都接受这一点,尽管它们通常会显示警报。 两者在内存中具有相同的结构 具有相同成员且顺序相同的类和结构将占用相同数量的内存,并且成员之间具有相同的填充。 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! Garrizano 2020-12-02T13:06:14+08:002020-12-02T13:06:14+08:00 在 C++中struct,class它们实际上是相同的,唯一的区别是struct默认成员是公共的,而默认成员class是私有的。 Astruct可以包含与 a 相同的class方法、构造函数、析构函数、继承。 eferion 2020-12-03T02:19:31+08:002020-12-03T02:19:31+08:00 除了在其他答案中提到的关于可见性的主题(我不打算评论的主题,因为它已经在其他答案中得到了很好的记录)之外,使用structand之间还有第二个区别,class在这种情况下的template: class可用于声明 a 的类型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
和之间的唯一区别struct
是其成员的可见性,默认情况下成员是struct
公共的,而成员默认情况下class
是私有的。忽略这种差异,两种构造都是相同的:
两者都可以用于继承
这意味着它们也可以同时具有虚函数、纯虚函数、覆盖函数和使用任何级别的继承。
两者都可以有公共、受保护和私有成员
两者都自动生成特殊功能
在这两种情况下,如果没有明确定义,它将自动创建:
两者都可以预先声明
我想提到这一点,因为可以预先声明一个对象
class
,然后将其声明为struct
(反之亦然);大多数编译器都接受这一点,尽管它们通常会显示警报。两者在内存中具有相同的结构
具有相同成员且顺序相同的类和结构将占用相同数量的内存,并且成员之间具有相同的填充。
在 C++中
struct
,class
它们实际上是相同的,唯一的区别是struct
默认成员是公共的,而默认成员class
是私有的。A
struct
可以包含与 a 相同的class
方法、构造函数、析构函数、继承。除了在其他答案中提到的关于可见性的主题(我不打算评论的主题,因为它已经在其他答案中得到了很好的记录)之外,使用
struct
and之间还有第二个区别,class
在这种情况下的template
:class
可用于声明 a 的类型template
,但struct
不能: