对象或静态中的C++方法 > C++支持面向对象,但不强制使用。 让我们举个例子: 我们有一个水果类,里面有一些复杂的数据。我们要计算卡路里

对象或静态中的C++方法 > C++支持面向对象,但不强制使用。 让我们举个例子: 我们有一个水果类,里面有一些复杂的数据。我们要计算卡路里,c++,object,C++,Object,备选案文1: 我们将该方法直接放在类中: 公众: 计算颜色; 备选案文2: 我们把它放在Fruit.cpp中,但不放在类本身中: int CalculateCaloriesF ->什么被认为是更好的实践 什么被认为是更好的实践 如果可以使用类的现有公共成员函数将函数实现为非成员函数,则最好将其设置为非成员函数 看看你能不能抽出点时间。有点长 简单的例子: class Circle { public: Circle(double r = 0) : radius(r) {}

备选案文1: 我们将该方法直接放在类中: 公众: 计算颜色;

备选案文2: 我们把它放在Fruit.cpp中,但不放在类本身中: int CalculateCaloriesF

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

什么被认为是更好的实践

如果可以使用类的现有公共成员函数将函数实现为非成员函数,则最好将其设置为非成员函数

看看你能不能抽出点时间。有点长

简单的例子:

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;
}
根据上面的文章,最好将这些函数作为非成员函数来实现,因为它们可以使用Circle的现有公共接口来实现

什么被认为是更好的实践

如果可以使用类的现有公共成员函数将函数实现为非成员函数,则最好将其设置为非成员函数

看看你能不能抽出点时间。有点长

简单的例子:

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;
}

根据上述文章,最好将这些函数作为非成员函数实现,因为它们可以使用Circle的现有公共接口实现。

在第二种情况下,您需要使用extern从其他文件中使用此函数。此外,它还需要复制f。这取决于需求、分析、设计和用例。在第二种情况下,您需要使用extern从其他文件中使用此函数。它也需要f的复制。这取决于需求、分析、设计和用例。我不明白这个答案。任何函数都可以作为非成员函数来实现。我将在稍后的回答中补充说明这个主题。我现在要睡觉了。@super-那不是真的。如果不依赖未定义的行为或编译器扩展,不通过中介访问类的任何私有成员,就不可能有一个像中一样可以直接访问的非友元非成员函数。@Peter我看不到在任何地方指定了非友元。您还可以添加一个getter,这样就可以绕过它。关键是答案不够具体,除非你已经知道答案,否则无法给出任何值。@super-你的陈述是错误的。我提供了一个反例,您通过施加额外的条件来响应—getter和setter是中介。无论如何,你不理解答案并不意味着它是错的。你需要阅读并理解给出的链接才能理解。我不理解这个答案。任何函数都可以作为非成员函数来实现。我将在稍后的回答中补充说明这个主题。我现在要睡觉了。@super-那不是真的。如果不依赖未定义的行为或编译器扩展,不通过中介访问类的任何私有成员,就不可能有一个像中一样可以直接访问的非友元非成员函数。@Peter我看不到在任何地方指定了非友元。您还可以添加一个getter,这样就可以绕过它。关键是答案不够具体,除非你已经知道答案,否则无法给出任何值。@super-你的陈述是错误的。我提供了一个反例,您通过施加额外的条件来响应—getter和setter是中介。无论如何,你不理解答案并不意味着它是错的。你需要阅读并理解给出的链接才能理解。