我需要用C++把所有东西都放到一个类中吗

Do I need to put everything in a class in C++?

本文关键字:一个 C++      更新时间:2023-10-16

我被告知C++中的所有东西(即使它没有被实例化,但在多个地方使用)都必须放在一个类中。虽然我知道我不必这么做,但我不知道哪一个更糟糕:制作一堆不需要实例化的类,还是在main.cpp.中有一堆函数

下面是一些示例代码,如果我遵循别人告诉我的:

#include <iostream>
using namespace std;
int main(){
// line of code to call class that acts as a calculator
}

不,不应该将所有内容都放入类中。不管是谁告诉你的都是错的。

C++不仅仅是一种OO语言,它还是一种多范式的语言。此外,将所有内容放入类中并不意味着代码是面向对象的(尤其是对于静态方法,您不需要实际的对象,只需要类型)。

如果你检查C++标准库,你会发现它包含许多不属于任何类的函数(例如,检查<algorithm><numeric>库的内容)。

在许多方面,非成员函数可以改进您的代码

如果您需要在逻辑上分离功能以避免所有内容都在全局范围内,那么您可以也应该使用名称空间。例如,前面提到的算法都放在std命名空间中。

在任何私人努力中都没有"要求",因此没有"需要"。编写许多函数和少量方法不需要其他人的许可。

在学校作业中,特别是当你学习C++和软件工程时,很可能是讲师要求使用课堂(通常是为了简化助教的工作量)。因此,是的,在这种情况下,存在"需求"。

你在软件开发中的工作可能包括遵守编码标准、与同行合作以及听从团队领导(即使你不同意或不喜欢他的领导)。这也暗示了使用类的需求(有时会确定目标),因此,您应该考虑到有使用类的"需求"。

无论如何,作为一个初学者,我认为你应该不要寻求我们的许可来避免C++类,相反,要勇敢地使用它们,尽可能多地练习,然后在你无法找到你的编码尝试失败的原因或原因时写信给这个论坛。


此外,总的来说,软件工程目标是所有程序员都应该能够向同事或同行捍卫自己的选择的。

我重视的一个例子来自Richard Fairley 的"软件工程概念"

"软件设计的一个基本目标是构建软件产品,从而最大限度地减少模块之间互连的数量和复杂性。实现这一目标的一套有吸引力的启发式方法涉及耦合和内聚的概念。"

换句话说,他描述的是两种想法,当它们结合在一起时,可能会使代码更容易阅读,更容易调试,更容易被老师、同学、同事和SO同事接受。(这两个术语都在维基百科中。)

Fairley上市

  • 7个耦合级别,从最强耦合(最不理想)对于最弱的耦合(最希望的)

  • 从最弱(最不可取)到最强(最可取)的8个内聚水平

如果你(和我一样)接受费尔利的"基本目标"对你来说很重要,那么也许它们对你"课堂上的每一件事"的决定都有影响。


我发现C++类是实现Fairley列表"最理想"目标的一种优越方法。我建议你接受这些想法,以及封装、数据隐藏甚至多态性。并用C++类来实践这些问题。

此外,比起较少的大班,我更喜欢多个小班。并且不超过3个继承级别(7个非常令人厌烦)。

也许我需要开始我的列表,并搜索其他人的"我写C++类时遵循的简单规则"列表。


代码示例-我的大多数实验看起来非常像以下内容:

int main(int argc, char* argv[] )
{
   T_t  myClass;   // instantiate a class T_t
   int retVal = myClass.exec(argc, argv);  // go
   return(retVal);
}

没有必要把所有东西都放在一个类中。您可以像在c中一样编写代码,即没有类结构。它在c++中运行良好,也运行良好

C++代码的编写可以着眼于面向对象。然而,并不是所有的东西都需要进入一个课堂。事实上,main不在类中(就像在Java中一样)。您也可以编写不附加到类的函数。一般来说,随着编写更多的类和函数,您的代码可能会变得更加模块化,但根据您的需要,这也会使代码变得比您需要的更复杂。那里有一种微妙的平衡。也许有了更多的信息,我们可以提供更多的建议。

当你说哪个更糟时,你的意思是什么?计算效率,代码维护还是其他什么?您可以始终将函数原型放在.h中,将实现放在.cpp中,即使它们没有附加到类以帮助您的驱动程序.cpp变得过于拥挤。