c++中的函数安排

本文关键字:函数 c++ | 更新日期: 2023-09-27 18:10:20

我刚开始用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

c++中的函数安排

函数必须在使用它们之前声明,但您可以稍后定义它们:

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