【问题标题】:Can structures in C++ have functions inside?C++ 中的结构可以在里面有函数吗?
【发布时间】:2016-01-02 12:58:39
【问题描述】:

在阅读一本书时,我遇到了以下几行:

C++ 中的结构和类之间的语法差异非常小,因此,只需稍作修改,它们就可以互换使用。结构体和类的唯一区别在于,默认情况下,类的成员是私有的,而默认情况下,结构体的成员是公共的。

但是,我的老师告诉我,我们不能在结构中使用函数。我读过的这本书很受欢迎,我认为上面写的是正确的。 结构内部可以有功能吗?如果是,请留下示例或参考链接。

【问题讨论】:

  • 你的老师错了。但是,这本书也不太对;除了structs 的默认访问是公开的,默认继承也是公开的。
  • @PeteBecker 谢谢!
  • 嗯,你有两个选择:换老师或者买另一本书(这次大概是C,但保留其他)... ;)。开个玩笑,也许你的老师正在解释 C 和 C++ 之间的区别(好主意),或者他的课程打算从简要介绍 C 语言开始,然后他将介绍 C++(恕我直言,这不是一个好主意)。
  • @Bob__ 我请老师澄清我的疑问,并展示了示例程序。她说,“你会得到输出,但你不应该那样做。永远不要再那样做。”此外,她给了我三个不同之处,其中之一是“类可以包含函数和变量,但结构只能包含变量。” .它只是 C++,从未向我们介绍过 C。
  • 你的老师需要老师。正如所有答案所指出的那样,在 C++ 中,结构可以具有成员函数,因为这些函数不亚于具有成员默认公共可见性的类。也许这对她来说是一个风格惯例问题,但规则很明确。

标签: c++ class oop struct


【解决方案1】:

A C struct 不能有成员函数。 (它可以有函数指针,但它们不是一回事。)

C++ struct 在各方面都等同于 class,但其成员的默认可见性,如您的书中所述(public 代表 structprivate 代表 class),以及它的默认继承。


class MyClass : public BaseClass
{
     public:
         MyClass();
         virtual ~MyClass();

         void someFunction();

     private:
         int member_;
};

在上面的示例中,它明确显示状态可见性(publicprivate)而不是依赖默认值(为了清楚起见,我赞同这种做法),关键字 class 可以交换为 struct,而不任何意义或结果的变化。

有些人认为struct 更适合纯数据收集,而class 更适合具有非平凡功能的成熟类,但仅此而已。


也许你的老师在谈论 C structs。

【讨论】:

  • 谢谢您,先生。我们学校没有 C,只有 C++。你能给我一个示例程序,以便我可以展示给我的老师吗?
  • @HGSur:任何带有成员函数的 C++ 片段,真的。如果您总是明确地提供可见性而不是依赖默认值(为了清楚起见,您应该这样做),structclass 只是可互换的关键字。
  • so struct something{private : } 等价于 class ?
  • 再次感谢。现在我明白了 struct 可以用一些关键字做一个类可以做的任何事情:)
【解决方案2】:

struct 中的方法示例:

#include <iostream>

struct HelloWorld {
    void operator()() const
    {
        std::cout << "hello world\n";
    }
};

int main() 
{
    HelloWorld{}();
}

Demo

【讨论】:

    【解决方案3】:

    C++ 中的structs 基本上是classes。因此,它们可以具有成员函数。阅读this 了解更多关于两者区别的信息。

    但是,我的老师告诉我,我们里面不能有函数 结构。

    说到 C 是正确的。C 只允许将数据存储在 struct 中。您可以做的最好的事情是将函数 pointer 存储在 struct 中。

    【讨论】:

      猜你喜欢
      • 2014-08-03
      • 1970-01-01
      • 2015-05-05
      • 2012-09-20
      • 2021-10-15
      • 2013-08-27
      • 1970-01-01
      • 2011-03-31
      • 1970-01-01
      相关资源
      最近更新 更多