我有一个有点大的程序,它使用类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中声明函数,那么请告诉我。我只是想知道如何实现最佳方法而不是多余的方法:)
答案 0 :(得分:4)
是否有必要在main中声明一个函数?
没有。在C ++ 11中,lambda会击败任何其他本地函数。
我想修改3个类对象,这样每次调用函数时都会有3个额外的参数(特别是递归)。我真的不明白为什么不在主打电话。这样做有什么害处?
您正在依靠捕获到函数中的全局变量或变量来创建函数。您的函数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(....);
}
答案 1 :(得分: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
}
答案 2 :(得分:0)
这是一个OOP设计问题。
如果所有类都应该使用相同的方法。您应该使用该方法创建一个超类。然后从该类继承制作另一个类。这样,所有类都有一个共同的方法,你只需要编写一次实现; - )
事实上,拥有一个全局方法是丑陋的,并且违反了OOP原则。虽然也可以争论OOP方法。
答案 3 :(得分:0)
您可以使用A4()作为普通函数,并通过将其指定为A类的友元函数,使A4()可以访问A类成员
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的声明