对象或静态中的 C++ 方法

标签 c++ object

所以 C++ 支持面向对象,但并不强制使用它。 让我们举个例子: 我们有一个 Fruit 类,里面有一些复杂的数据。而我们要计算卡路里

选项 1: 我们直接把方法放在类中: 公开: int 计算卡路里();

选项 2: 我们将其放在 Fruit.cpp 中,但不放在类本身中: int calculateCalories(Fruit f);

->什么被认为是更好的实践?

最佳答案

What is considered to be better pratice?

如果函数可以使用现有的 public 实现为非成员函数类的成员函数,最好使它成为非成员函数。

参见 How Non-Member Functions Improve Encapsulation如果你能抽出时间。有点长。

简单的例子:

class Circle
{
   public:
      Circle(double r = 0) : radius(r) {}

      double getRadius() const { return radius; }

   priviate:
      double radius;
};

鉴于上述情况,可以实现使用非成员函数计算圆的面积和周长的函数。

double area(Circle const& c)
{
   double r = c.getRadius();
   return M_PI*r*r;
}

double circumference(Circle const& c)
{
   double r = c.getRadius();
   return 2*M_PI*r;
}

根据上面的文章,最好将这些函数实现为非成员函数,因为它们可以使用现有的 public 实现Circle的界面.

关于对象或静态中的 C++ 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55529542/

相关文章:

c++ - 编译器是否能够对从 dll 导入的函数进行程序集成?

c++ - 循环双向链表 - 段错误 : 11

java - 如何访问 ArrayList 中对象的特定元素

java - 将多条记录添加到 List<List<Object>>

python - 在 python 中使用 C++ 对象与 pybind11

c++ - 如何以特定方式在 C++ STL 中查找?

java - 如何将opencv代码转换为javacv代码

php - 我可以在 Laravel 5 session 中保存对象、对象集合吗?

Javascript:在 JavaScript 中是否有等同于 lua 的 _G?

javascript - JS - 属性替换