是否有必要在main中声明函数
Is it ever necessary to declare a function inside main?
我有一个很大的程序,它使用类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中声明函数更好,请告诉我。我只想知道如何实现最佳方法,而不是任何多余的方法:)
有必要在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(....);
}
您可以将苹果和香蕉设置为全局,这样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
}
这是一个OOP设计问题。
如果所有类都应该具有相同的方法。您应该创建一个具有该方法的超类。然后从该类继承,生成另一个类。这样,所有的类都有一个共同的方法,并且只需要编写一次实现;-)
事实上,拥有一个全局方法是丑陋的,并且违背OOP原则。尽管也有人会争论OOP方法。
您可以将A4()用作普通函数,并通过将其指定为A类的友元函数,使类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 的声明
- C++:为什么允许在另一个函数中声明函数,而不允许在函数定义中声明?
- 在c++中在类外声明函数有什么好处
- 使用 #define 声明函数
- 在静态库中声明函数,在使用该相同库的应用程序中定义它
- 如何强制编译器在 C/C++ 本身中声明函数?
- 如果您只需要在 .h 文件中声明函数.cpp是否需要在 .h 文件中声明函数?
- C++:<sys/sysctl.h> 无法声明函数CTL_HW和HW_NCPU
- 尝试声明函数的局部变量,但得到范围错误
- 如何在C++模板中声明函数
- 如何在另一个文件的类中声明函数
- 使用非类型模板参数正向声明函数模板
- 在此范围错误中未声明函数错误
- 当我们不能声明函数内联(GCC 编译器)时?
- 未在此作用域中声明函数,即使存在头文件也是如此
- 无法声明函数中的模板类型别名
- 单个CPP文件中多次声明函数声明可以吗?
- 编译一个支持VBA中声明函数的dll
- 使用从外部参数包中获取的参数类型声明函数
- 使用类成员正确地声明函数
- 在函数内重新声明函数