可能重复:
What are the differences between struct and class in C++
class and struct in c++
看起来struct可以有构造函数和析构函数以及成员,看起来非常简单,所以我们可以使用struct而不是类,如果不是,我们什么时候才能使用struct和函数?
https://github.com/developmentseed/node-sqlite3/blob/master/src/database.h#L32
struct Baton {
uv_work_t request;
Database* db;
Persistent<Function> callback;
int status;
std::string message;
Baton(Database* db_, Handle<Function> cb_) :
db(db_), status(SQLITE_OK) {
db->Ref();
uv_ref(uv_default_loop());
request.data = this;
callback = Persistent<Function>::New(cb_);
}
virtual ~Baton() {
db->Unref();
uv_unref(uv_default_loop());
callback.Dispose();
}
};
struct OpenBaton : Baton {
std::string filename;
int mode;
OpenBaton(Database* db_, Handle<Function> cb_, const char* filename_, int mode_) :
Baton(db_, cb_), filename(filename_), mode(mode_) {}
};
答案 0 :(得分:3)
绝对没有技术理由偏爱其他人,但我注意到有关使用class
或struct
的某项约定。
如果你的数据类型是程序的其他部分使用的东西(即它是'界面'的一部分),那么通常人们会使它成为class
以表明其重要性。如果数据类型仅用于函数或类的实现,并且在某个范围之外不可见,则将其设为struct
。
这些是一些非常激烈的指导方针,但如果你不遵守它们,就不会抱怨。
编辑:在C ++中,两者之间并没有真正的区别,但其他受C ++启发的新语言实际上使struct
和class
不同。例如,在C#和D中,class
和struct
都用于定义数据类型,但它们不相同:struct
被实现,因此它应该用于'小'types。
答案 1 :(得分:2)
唯一的区别是默认访问级别(类private
,结构public
)。除此之外,它们完全可以互换。你应该决定哪一个更好,并且一直使用它(一致性使你的代码更具可读性)。
答案 2 :(得分:2)
什么时候我们在使用类时使用struct和函数?
这完全是您的选择 没有什么可以用类做,而不是C ++中的结构。
只有结构和类别之间的区别是:
因此,只需使用您选择的一个并坚持使用它,不要混合类和结构。
答案 3 :(得分:1)
class
和struct
之间的唯一区别是其成员和基类的默认可访问性。 struct
为public
,class
为private
。
答案 4 :(得分:1)
正如其他结构和&amp; class除默认访问级别外没有任何区别。但是,通常的做法是使用结构主要用于数据聚合,因为这就是结构体缩减为C的结果。例如,根据我的经验,用户定义的POD几乎总是被创建为结构体。
答案 5 :(得分:0)
正如其他人所说,主要区别在于成员数据和功能的默认访问级别,即类的私有和结构的公共访问。默认继承访问级别也是如此:类为private,结构为public。
至于何时使用哪个,这是公司正常做的事情。根据我的经验,大多数公司,甚至是个人,使用结构来保存纯数据和类的数据包,用于存储对其自己的数据和/或结构进行操作的函数集合。
这种方法是C编程的回归,其中结构只能存储数据而不能存储函数,所以大多数人都喜欢在C ++中坚持这个定义。
请注意,对于仿函数使用结构体是很常见的,这似乎会通过不包含函数的结构代码来破坏一致性,但由于仿函数通常只会重载()运算符,所以我们仍保留某种形式的一致性。此外,它节省了我们必须为一个功能和/或继承结构键入公共...哦,我们允许自己避免的打字;)
答案 6 :(得分:-2)
类是引用类型。创建类的对象时,为其分配对象的变量仅保留对该内存的引用。将对象引用分配给新变量时,新变量引用原始对象。通过一个变量进行的更改会反映在另一个变量中,因为它们都引用相同的数据。
struct 是值类型。创建结构时,为其分配结构的变量保存结构的实际数据。将结构分配给新变量时,会复制该变量。因此,新变量和原始变量包含相同数据的两个单独副本。对一个副本所做的更改不会影响另一个副本。
通常,类用于建模更复杂的行为,或者在创建类对象后要修改的数据。结构最适合于小数据结构,主要包含在创建结构后不打算修改的数据。