c++ struct OO vs class OO

  • 本文关键字:OO class vs c++ struct c++
  • 更新时间 :
  • 英文 :


可能的重复项:
C++
结构体和类有什么区别 C++ 中的类和结构

看起来结构

体可以有构造函数、析构函数和成员,看起来很简单,那么我们可以使用结构体代替类吗,如果没有,我们什么时候应该将结构与函数一起使用,什么时候我们应该使用类?

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

绝对没有技术上的理由更喜欢一个而不是另一个,但我注意到关于使用 classstruct 的某种约定。

如果你的数据类型是程序的其他部分使用的东西(即它是"接口"的一部分(,那么通常人们把它作为一个class来表明它的重要性。如果数据类型仅用于函数或类的实现,并且在特定范围之外不可见,则使其成为struct

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


编辑:C++两者之间没有真正的区别,但其他受C++启发的新语言实际上使structclass不同。例如,在 C# 和 D 中,classstruct 都用于定义数据类型,但它们并不相同:struct 的实现方式应将其用于"小型"类型。

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

我们什么时候应该在函数中使用结构体 什么时候我们应该使用类?

这完全是您的选择。
在C++中,人们不能对类做任何事情,也不能对结构做任何事情。

结构和类之间的唯一区别是:

  • 访问说明符对于类默认为私有,对于结构默认为公共
  • 对于类,继承默认为私有,对于结构默认为公共

因此,只需使用您选择的一个并坚持始终如一地使用它,不要混合类和结构。

而正如其他结构和类所述,除了默认访问级别之外没有任何区别。但是,通常的做法是主要使用结构进行数据聚合,因为这是 C 中简化的结构。例如,根据我的经验,用户定义的 POD 几乎总是创建为结构。

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

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

至于什么时候用哪个,那是公司正常做的事情。 根据我的经验,大多数公司,甚至个人,都使用结构来保存纯数据包和类来存储基于其自己的数据和/或结构运行的函数集合。

这种方法是对 C 编程的回归,其中结构只能存储数据而不能存储函数,因此大多数人也喜欢在C++中坚持这个定义。

请注意,通常对函子

使用结构,这似乎通过不包含函数的结构代码来破坏一致性,但由于函子通常只重载 (( 运算符,我们无论如何都会保留某种形式的一致性。 另外,它使我们不必为一个函数和/或继承的结构键入 public... 哦,我们允许自己避免打字;)

是一种引用类型。创建类的对象时,为其分配对象的变量仅包含对该内存的引用。将对象引用分配给新变量时,新变量将引用原始对象。通过一个变量所做的更改会反映在另一个变量中,因为它们都引用相同的数据。

结构是一种值类型。创建结构时,为其分配结构的变量保存结构的实际数据。将结构分配给新变量时,将复制该结构。因此,新变量和原始变量包含相同数据的两个单独副本。对一个副本所做的更改不会影响另一个副本。

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

最新更新