在c++中,在哪些情况下使用结构体比使用类更好?


当前回答

它们是一样的,只是默认值不同(class默认为private, struct默认为public),所以理论上它们是完全可以互换的。

所以,如果我只是想打包一些信息来移动,我使用一个结构体,即使我在那里放了一些方法(但不是很多)。如果它是一个最不透明的东西,其中主要使用将通过方法,而不是直接到数据成员,我使用一个完整的类。

其他回答

从技术上讲,这两者在c++中是相同的——例如,结构体可能具有重载操作符等。

然而:

当我希望同时传递多种类型的信息时,我使用结构体 当我处理一个“功能性”对象时,我使用类。

希望能有所帮助。

#include <string>
#include <map>
using namespace std;

struct student
{
    int age;
    string name;
    map<string, int> grades
};

class ClassRoom
{
    typedef map<string, student> student_map;
  public :
    student getStudentByName(string name) const 
    { student_map::const_iterator m_it = students.find(name); return m_it->second; }
  private :
    student_map students;
};

例如,我在这里的get…()方法中返回一个struct student -喜欢。

我从来不在c++中使用struct。

我无法想象在需要私有成员时使用结构体的场景,除非您故意试图混淆。

使用结构体似乎更像是一种如何使用数据的语法指示,但我宁愿只创建一个类,并尝试在类的名称中显式地表示它,或通过注释。

E.g.

class PublicInputData {
    //data members
 };

c++中类和结构的区别是:

结构成员和基类/结构在默认情况下是公共的。 默认情况下,类成员和基类/结构是私有的。

类和结构都可以混合使用public、protected和private成员,可以使用继承,也可以有成员函数。

我向你推荐:

对于没有任何类样特性的普通旧数据结构使用struct; 在使用私有或受保护成员、非默认构造函数和操作符等特性时使用类。

在用我的主要语言c++编程多年之后,我得出了一个死结论,那就是这是c++的另一个愚蠢的特性。

两者之间没有真正的区别,我也没有理由花额外的时间来决定是应该将实体定义为结构体还是类。

要回答这个问题,请随时将实体定义为结构。默认情况下,成员将是公开的,这是规范。但更重要的是,默认情况下继承将是公开的。受保护继承和更糟糕的私有继承是例外。

我从来没有遇到过私人继承是正确做法的案例。是的,我试图发明问题来使用私有继承,但它不起作用。如果不使用访问器关键字,面向对象编程的角色模型Java默认为公共继承。顺便提一下,Java不允许在继承类上访问关键字,它们只能被公开继承。所以你可以看到,cpp团队在这里真的很失败。

另一件令人沮丧的事情是,如果你定义为类,声明为结构,你会得到编译警告。就好像这是影响程序性能或准确性的东西一样。一个回答还指出,MSVC可能会产生编译器错误。

Those persons that use classes when it is raining and structs when it is shining are doing so based on what they have been taught. It's not something they discovered to be true. Java does not have a pair of names for classes, and only have the class keyword. If you want a data structure, simply make all your members public and don't add functions. This works in Java and I don't see any problem. What's the problem? You need 4 or 5 characters of BOM code to determine how to interpret the context of a class entity.

我认为Structs是作为一个数据结构(像一个多数据类型的信息数组)和类是为代码打包(像子例程和函数的集合)而设计的。

:(