0

我有一个有点大的程序,它使用类 A 和类的一些函数以及类外的一些全局函数。然后我有该类的多个对象,我希望使用另一个函数同时操作它们。我相信(至少一直被建议)最好在 main 之外声明函数。

但是,如果我在 main 外部声明,似乎没有一种体面的方式可以调用我的对象,因为它们的范围仅限于 main 并且我不想将每个对象作为不同的参数传递,因为这会使事情复杂化。我相信如果我只是把我的函数放在 main 里面,我就不会遇到这些问题。

有没有更优雅的方法来做到这一点?

如果我的问题不清楚,这里是代码大纲:

class A
{
  void A1();
  void A2();
  void A3();
} //class functions that modify class objects

void A4(); //global function(cant call apple elegantly if placed here)

int main() {
  A apple;
  A banana; //class ojects
  A4(); //gotta modify objects apple and banana by calling A1,A2,A3
        // on them depending on the user input
  return 0;
}

另外,在这种情况下,如果在 main 中声明函数更好,那么请告诉我。我只想知道如何实现最好的方法而不是任何多余的:)

4

4 回答 4

4

是否有必要在 main 中声明一个函数?

不,在 C++11 中,lambda 会击败任何其他本地函数。

我想修改 3 个类对象,因此每次调用函数时只需 3 个额外参数(特别是递归)。我真的不明白为什么不直接在 main 中调用它。这样做有什么坏处?

您正在制作一个依赖于全局变量或捕获到函数中的变量的函数。您的函数A4()想要修改任何变量,只需将其作为变量传递并A4()多次调用以操作 N 次。

void A4(A& a); // A4 can operate on any objects of A type

int main() {
  A apple;
  A banana; //class objects

  A4(apple);  // A4 can operate on any objects of A type
  A4(banana);
  A4(....);   
}
于 2013-08-24T10:36:43.447 回答
1

你可以让苹果和香蕉全球化,这样 A4 就可以访问它们。

class A
{
public:
    void A1();
    void A2();
    void A3();
} //class functions that modify class objects


A apple;
A banana; //class ojects

void A4(); //global function

int main() {

    A4(); //gotta modify objects. But want to place this function outside main
    return 0;
}

void A4()
{
    // do some stuff with apple and banana
}

但我宁愿避免使用全局变量,而让 A4 通过引用获取应该被操纵的对象/或任何你想用它做的事情。

喜欢:

void A4(A& a)
{
    // do some stuff with a
}
于 2013-08-24T10:35:41.227 回答
0

这是一个 OOP 设计问题。

如果所有类都应该有相同的方法。您应该创建一个具有该方法的超类。然后从那个类继承另一个类。这样,所有类都有一个共同的方法,您只需编写一次实现;-)

事实上,拥有一个全局方法是丑陋的,并且违反了 OOP 原则。尽管人们也可以争论 OOP 方法。

于 2013-08-24T10:23:51.517 回答
0

您可以将 A4() 用作普通函数,并通过将 A4() 指定为 A 类的友元函数来使 A4() 类的成员可访问

    class A{

     friend void A4 ( A & );

     public:
           void A1(){...}

           void A2(){...}

    };

    void A4 ( A& );

    void A4(A &apple)
    {
      apple.A1();
      apple.A2();
      ....
    }

    int main()
    {
       A apple;

       A4(apple);

       return 0;
     }

请注意 A 类中的声明

    friend void A4(A &);

只是一个访问规范而不是函数 A4 的声明

于 2013-08-24T15:37:11.877 回答