2011-12-19 79 views
-1

可能重复:
What are the differences between struct and class in C++
class and struct in c++C++结构OO VS类OO

它看起来像结构可以有构造函数和析构函数和成员,而且看起来很简单,所以可以我们使用struct而不是class,如果不是的话,我们什么时候应该使用结构和函数?

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_) {} 
}; 

回答

2

唯一的区别是默认的访问级别(private一类,public一个结构)。除此之外,它们完全可以互换。你应该决定你更喜欢哪一个,并且一直使用它(一致性使得你的代码更具可读性)。

1

classstruct之间的唯一区别是其成员和基类的默认可访问性。对于struct,它是publicclass,它是private

2

什么时候我们应该在什么时候使用struct函数?

这完全是你的选择。
没有什么可以用类来做,而不用C++中的结构。

结构和类之间

唯一的区别是:

  • 访问符默认为私有类和公众结构
  • 继承默认为私有类和公众结构

所以才使用你的选择并坚持使用它,不要混合类和结构。

1

尽管如其他结构&所述,除了默认访问级别之外,其他类没有任何区别。然而,通常使用结构主要用于数据聚合,因为结构体被简化为C.例如用户定义的POD几乎总是按照我的经验创建的。

3

绝对没有任何技术理由可以选择其中的一种,但我注意到使用classstruct的某种约定。

如果你的数据类型是你的程序的其他部分(即它是'界面'的一部分)使用的东西,那么通常人们会将它指定为class以表示它的重要性。如果数据类型仅用于实现函数或类,并且在特定范围外不可见,则将其设置为struct

这些是一些非常强烈的指导方针,但没有人会抱怨,如果你不遵循它们。


编辑:在C++中有两个之间没有真正的区别,而是由C++曾作过structclass不同的启发其他新的语言。例如,在C#和D中,classstruct都用于定义数据类型,但它们并不相同:实现了struct以便它应该用于“小”类型。

0

正如其他人所说,主要区别在于成员数据和函数的默认访问级别,即私有类和公共结构。默认继承访问权限级别也是如此:私有类和公共结构。

至于什么时候使用哪个,这是公司正常工作的问题。根据我的经验,大多数公司和个人都使用结构来保存纯数据和类的数据包,以存储运行在其自己的数据和/或结构上的一组函数。

这个方法是C编程的一个倒退,其中结构只能存储数据而不是函数,所以大多数人也喜欢用C++来定义这个定义。

请注意,通常使用函子的结构体,这似乎会通过不包含函数的结构代码破坏一致性,但由于函子通常只会重载()运算符,所以我们保留某种形式的一致性。此外,它可以节省我们不得不公开输入一种功能和/或继承的结构......哦,我们允许自己避免的打字;)

+0

范围是一样的。访问级别不是。 – 2011-12-22 12:14:40

+0

感谢您指出了这一点;我已经修改了我的答案 – BigDaveDev 2011-12-23 06:46:50

-2

A 是一个参考类型。当类的一个对象被创建时,该对象被分配到的变量只保存对该内存的引用。将对象引用分配给新变量时,新变量引用原始对象。通过一个变量所做的更改反映在另一个变量中,因为它们都指向相同的数据。

A struct是一个值类型。当一个结构被创建时,结构被分配的变量保存结构的实际数据。当结构被分配给一个新的变量时,它被复制。因此新变量和原始变量包含相同数据的两个独立副本。对一个副本所做的更改不会影响其他副本。

通常,类用于建模更复杂的行为,或者在创建类对象后修改数据。结构最适合小数据结构,主要包含在创建结构后不打算修改的数据。

+0

你在谈论C++吗? – fefe 2011-12-19 15:45:24

+0

@Michael:这是一个C++问题。 – 2011-12-19 16:24:46