c++中的函数安排
Functions Arrangement in C++
我刚开始用c++,我有一些问题安排函数。
当我使用Unity (c#)时,我习惯于首先编写Start函数,然后根据它们将被调用的时间编写其他函数。
但是在这里,在c++中,看起来是相反的!
例如,我在LearnCPP.com上学习时写了这个简单的程序
#include <iostream>
void Add(int No1, int No2)
{
std::cout << No1 + No2 << std::endl;
}
void Subtract(int No1, int No2)
{
std::cout << No1 - No2 << std::endl;
}
void GetNumbers(int Operation)
{
int No1;
int No2;
std::cout << "The first no. : ";
std::cin >> No1;
std::cout << "The second no. : ";
std::cin >> No2;
if (Operation == 1)
{
Add(No1, No2);
}
else if (Operation == 2)
{
Subtract(No1, No2);
}
}
int main ()
{
while (true)
{
int Operation;
int TryAgain;
std::cout << "Enter 1 for an Addition Operation. Enter 2 for a Subtraction Operation." << std::endl;
std::cin >> Operation;
GetNumbers(Operation);
std::cout << "Enter 1 to try again. Enter 2 to exit.";
std::cin >> TryAgain;
if (TryAgain == 1)
{
}
else if (TryAgain == 2)
{
break;
}
}
return 0;
}
如果我要用c#写它,我会首先写main (Start)函数,然后是GetNumbers,然后是Add和Subtract函数。
如果我用c++这样写,我会得到错误(我使用的是Visual Studio 2013 Community Edition)。
我有什么办法可以做到吗?
Thanks in Advance
函数必须在使用它们之前声明,但您可以稍后定义它们:
int add (int a, int b);
int main () {
return add(1,2);
}
int add (int a, int b) {
return a + b;
}
这是因为c++需要一个函数头来知道函数在调用之前使用了哪些参数,所以你要么在main中调用它们之前定义它们,要么像这样声明函数原型:
#include <iostream>
//function prototypes
void Add(int No1, int No2);
void Subtract(int No1, int No2);
void GetNumbers(int Operation);
int main ()
{
while (true)
{
int Operation;
int TryAgain;
std::cout << "Enter 1 for an Addition Operation. Enter 2 for a Subtraction Operation." << std::endl;
std::cin >> Operation;
GetNumbers(Operation);
std::cout << "Enter 1 to try again. Enter 2 to exit.";
std::cin >> TryAgain;
if (TryAgain == 1)
{
}
else if (TryAgain == 2)
{
break;
}
}
return 0;
}
void Add(int No1, int No2)
{
std::cout << No1 + No2 << std::endl;
}
void Subtract(int No1, int No2)
{
std::cout << No1 - No2 << std::endl;
}
void GetNumbers(int Operation)
{
int No1;
int No2;
std::cout << "The first no. : ";
std::cin >> No1;
std::cout << "The second no. : ";
std::cin >> No2;
if (Operation == 1)
{
Add(No1, No2);
}
else if (Operation == 2)
{
Subtract(No1, No2);
}
}
您至少应该使用前向声明函数,并且可能使用包含前向声明的.hpp文件。
在c++中,我们主要使用作用域,也就是说,只要变量或函数没有在外部声明或之前声明(头文件等),编译器就无法判断。
在这种特殊情况下,如果你比较苹果和苹果,c++的工作原理就像c#一样。类似于c#的例子将包括一个类,其中包含一些成员,您可以以任何顺序定义和调用:
class CMyClass
{
void Start()
{
GetNumbers(1);
}
void GetNumbers(int Operation)
{
Add(2, 3);
Subtract(4, 5);
}
void Add(int No1, int No2) {}
void Subtract(int No1, int No2) {}
};
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- 将对象数组的引用传递给函数
- 函数调用中参数的顺序重要吗
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用不带参数的函数访问结构元素
- 代码在main()中运行,但在函数中出现错误
- 内置函数可查看CPP中的成员变量
- 如何获取std::result_of函数的返回类型
- 如何在c++中为模板函数实例创建快捷方式
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗