C ++ struct可以有成员函数吗?

时间:2014-06-13 02:41:20

标签: c++ class struct member-functions

我对结构和类之间的区别感到很困惑,因为我似乎看到它们用于几乎相同的东西。我搜索了差异,我看到的唯一答案是默认情况下结构体有公共成员,默认情况下类有私有成员。但是,我的讲师刚刚告诉我结构不能包含成员函数。但我在互联网上看到很多线程,其中人们在结构中包含成员函数,并特别说这样做是可以的。

我的讲师似乎坚持认为根据定义的结构不能具有功能,所以发生了什么?我唯一能想到的是,编译器可能会将结构中的函数更改为其他内容,以便它们在技术上不包含函数......这些矛盾是否有明确的答案?

6 个答案:

答案 0 :(得分:38)

  

我搜索了差异,我看到的唯一答案是默认情况下结构体有公共成员,默认情况下类有私有成员。

是的,这是正确的。此外,默认情况下,struct的基础是公开继承的,而默认情况下,类的基础是私有继承的。

将函数声明为结构的成员与将函数声明为类的成员具有完全相同的语义,除了您已注意到的差异。在每种情况下,它们都被称为成员函数

答案 1 :(得分:6)

你的讲师显然是错的,假设他们实际上是在谈论C ++而不是C。

在代码中向自己证明这一点很简单,或者选择The C++ Programming Language并查找结构。

答案 2 :(得分:3)

C ++ structs可以definitely have member functions。另一方面,C结构是一种非常不同的野兽 - 它们本质上是为某些指标提供名称和类型信息的数组。

答案 3 :(得分:1)

在我看来,仅仅因为语言允许的东西并不意味着它是一个好主意。虽然从技术上讲C ++结构可以包含函数,但我不认为struct数据类型的原始意图是包含函数。引入类类型以支持定义数据和以紧密编织关系作用于数据的逻辑是不是主要目的,从而促进数据的更健康的接口?

答案 4 :(得分:1)

在C ++ 98标准中:

  

结构是用class-key结构定义的类;它的成员和基类(第10节)默认为公开(第11节)。

  

默认情况下,用关键字class定义的类的成员是私有的。默认情况下,使用关键字struct或union定义的类的成员是公共的。

因此,这意味着structclass之间的唯一区别是默认成员访问控制为publicprivate

  

C ++结构可以具有成员函数吗?

是的,他们可以。

  

我的讲师似乎坚持认为按定义的结构不能具有功能,那么到底发生了什么?

如果这是关于C的讲座,那是正确的。 如果这是关于C ++的讲座,那是不正确的。

  

我唯一能想到的是,也许编译器将结构中的函数更改为其他函数,以使它们在技术上不包含函数……对于这些矛盾是否有明确的答案?

是的,有一个明确的答案:C ++结构可以具有成员函数。

答案 5 :(得分:-1)

我目前正在一个项目上,我刚刚意识到我的结构需要能够提供一个比较运算符,以便包含它的排序列表能够进行排序。因此,在结构中具有运算符重载是有意义的。这是拥有带有方法的结构的唯一正当理由。