Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
便利功能是一种好的做法吗? 我编写了C++项目,我在考虑编码一些总是具有相同参数和相同输出的函数,而且不同的(和不相关的)类将使用它们。但我现在很不情愿,因为我觉得这样的“方便”函数并不像它应该的那样面向对象,我应该为这些函数编写一个最小的类。那么,从C++的角度来看,便利函数是一个好的面向对象编程编程实践吗?这是一个糟糕设计的标志吗_C++_Oop - Fatal编程技术网

便利功能是一种好的做法吗? 我编写了C++项目,我在考虑编码一些总是具有相同参数和相同输出的函数,而且不同的(和不相关的)类将使用它们。但我现在很不情愿,因为我觉得这样的“方便”函数并不像它应该的那样面向对象,我应该为这些函数编写一个最小的类。那么,从C++的角度来看,便利函数是一个好的面向对象编程编程实践吗?这是一个糟糕设计的标志吗

便利功能是一种好的做法吗? 我编写了C++项目,我在考虑编码一些总是具有相同参数和相同输出的函数,而且不同的(和不相关的)类将使用它们。但我现在很不情愿,因为我觉得这样的“方便”函数并不像它应该的那样面向对象,我应该为这些函数编写一个最小的类。那么,从C++的角度来看,便利函数是一个好的面向对象编程编程实践吗?这是一个糟糕设计的标志吗,c++,oop,C++,Oop,举例说明: 假设我们有两个类,类球体和类枕头。由于某些(可能不同)散列原因,Bot有一个成员变量char[8]hash,但始终使用相同的散列算法。现在我有三个选择: 为每个类实现一个成员函数makeHash() 实现由类调用的便利函数makeHash() 重构整个设计,使球体和枕头子类成为同一父类 我不喜欢第一个选项,因为它会创建重复的代码,我不喜欢最后一个选项,因为它会导致“类集群”,其中每个类或多或少都是另一个类的相对物(这显然是糟糕的OOP) 当然,OOP与其说是一门精确的科学,不如说

举例说明:

假设我们有两个类,
类球体
类枕头
。由于某些(可能不同)散列原因,Bot有一个成员变量
char[8]hash
,但始终使用相同的散列算法。现在我有三个选择:

  • 为每个类实现一个成员函数
    makeHash()
  • 实现由类调用的便利函数
    makeHash()
  • 重构整个设计,使
    球体
    枕头
    子类成为同一父类
我不喜欢第一个选项,因为它会创建重复的代码,我不喜欢最后一个选项,因为它会导致“类集群”,其中每个类或多或少都是另一个类的相对物(这显然是糟糕的OOP)


当然,OOP与其说是一门精确的科学,不如说是一门艺术(有时是宗教)。然而,在OOP中设计时,通常创建方便的函数是否是一种好的做法?

如果您坚持OOP设计,那么您的
char[8]hash
将是一个实际的
hash
类。然后,这就解决了您的问题。

将公共代码分解为单独的模块始终是一种良好的做法,因为它减少了代码重复,并使您可以更改为一段代码指定描述性名称

为了使您的代码保持模块化(即,在更改某些内容时减少“涟漪效应”),最好寻找一个概念,以最少的依赖性对一段代码进行建模


因此,一个只依赖于其参数且没有副作用(即返回值中返回唯一结果)的全局函数是非常有意义的。

+1使用
散列
类的一个很好的副作用是,它使类型系统更有用(即编译器更强大!).这就是我的想法,但这不会造成很大的开销吗?毕竟,我将不得不为整个类分配空间(基本上包含
char[8]
),而不仅仅是
char
@alex。如果该类没有多个父类,也没有虚拟函数,那么它的内存占用将与其成员的内存占用相同,因此没有开销。