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


当前回答

现有的答案中有很多误解。

class和struct都声明一个类。

是的,您可能必须在类定义中重新安排访问修改关键字,这取决于您用于声明类的关键字。

但是,除了语法之外,选择一种而不是另一种的唯一原因是惯例/风格/偏好。

有些人喜欢对没有成员函数的类坚持使用struct关键字,因为最终的定义“看起来像”C中的简单结构。

类似地,有些人喜欢对具有成员函数和私有数据的类使用class关键字,因为它表示“类”,因此看起来像他们最喜欢的面向对象编程书籍中的示例。

实际上,这完全取决于您和您的团队,这对您的程序没有任何影响。

下面这两个类除了名字以外在其他方面都是完全等价的:

struct Foo
{
   int x;
};

class Bar
{
public:
   int x;
};

你甚至可以在重新声明时切换关键字:

class Foo;
struct Bar;

(虽然这将破坏Visual Studio构建由于不一致,所以编译器将发出一个警告,当你这样做。)

下面的表达式都为true:

std::is_class<Foo>::value
std::is_class<Bar>::value

不过,请注意,在重新定义时不能切换关键字;这只是因为(根据单定义规则)跨翻译单元的重复类定义必须“由相同的标记序列组成”。这意味着你甚至不能交换const int成员;,并且与类或结构的语义无关。

其他回答

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

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

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

我向你推荐:

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

从技术上讲,这两者在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 -喜欢。

类。

默认情况下,类成员是私有的。

class test_one {
    int main_one();
};

等于

class test_one {
  private:
    int main_one();
};

所以如果你尝试

int two = one.main_one();

我们将得到一个错误:main_one是私有的,因为它不可访问。我们可以 通过指定它的公共ie来初始化它来解决它

class test_one {
  public:
    int main_one();
};

结构体。

struct是一个类,其成员默认为public。

struct test_one {
    int main_one;
};

意味着main_one是私有的,即

class test_one {
  public:
    int main_one;
};

我用struct表示数据结构,其中成员可以取任何值 那样容易些。

我只在需要保存一些没有任何成员函数与之关联的数据(对成员数据进行操作)并直接访问数据变量时使用struct。

从文件和套接字流等读取/写入数据。在函数参数太多且函数语法看起来太冗长的结构中传递函数参数。

从技术上讲,类和结构之间没有太大的区别,除了默认的可访问性。 更重要的是,它取决于你如何使用它的编程风格。

现有的答案中有很多误解。

class和struct都声明一个类。

是的,您可能必须在类定义中重新安排访问修改关键字,这取决于您用于声明类的关键字。

但是,除了语法之外,选择一种而不是另一种的唯一原因是惯例/风格/偏好。

有些人喜欢对没有成员函数的类坚持使用struct关键字,因为最终的定义“看起来像”C中的简单结构。

类似地,有些人喜欢对具有成员函数和私有数据的类使用class关键字,因为它表示“类”,因此看起来像他们最喜欢的面向对象编程书籍中的示例。

实际上,这完全取决于您和您的团队,这对您的程序没有任何影响。

下面这两个类除了名字以外在其他方面都是完全等价的:

struct Foo
{
   int x;
};

class Bar
{
public:
   int x;
};

你甚至可以在重新声明时切换关键字:

class Foo;
struct Bar;

(虽然这将破坏Visual Studio构建由于不一致,所以编译器将发出一个警告,当你这样做。)

下面的表达式都为true:

std::is_class<Foo>::value
std::is_class<Bar>::value

不过,请注意,在重新定义时不能切换关键字;这只是因为(根据单定义规则)跨翻译单元的重复类定义必须“由相同的标记序列组成”。这意味着你甚至不能交换const int成员;,并且与类或结构的语义无关。