C ++函数,通过引用传递

时间:2017-08-11 06:17:42

标签: c++ function pass-by-reference

调用函数时,我将参数作为参考传递出来。 我们将按照以下指示构建一个程序:

  

通过编写以下函数的函数定义和函数原型来完成上述程序:

     

displaymenu   此函数接受num1和num2作为引用传递的参数,并返回一个字符作为输出。该功能显示菜单并接受以下用户给定的输入:

A num1
B num1 num2
Q
     

checkeven   如果参数是偶数,则此函数返回TRUE。否则函数返回FALSE。

     

divisible   如果第一个参数num1可被第二个参数num2。

整除,则此函数返回TRUE

到目前为止,这是我的代码并且在传递参数时遇到错误。

#include <iostream>

using namespace std;
int num1, num2 = 0;
char displaymenu(int num1, int num2);
bool checkeven (int num1);
bool divisible (int num1, int num2);

int main(){
    int num1, num2 = 0;
    char choice;
    do{
       choice = displaymenu(num1,num2);    
       if (choice == 'A'){
           if (checkeven(num1))
               cout << num1 << " is even." << endl;
           else 
                cout << num1 << " is odd." << endl;
       }          
       else if (choice == 'B'){
          if (divisible(num1, num2))
              cout << num1 << " is divisible by " << num2 << endl;
          else
              cout << num1 << " is not divisible by " << num2 << endl;
       }
       else if (choice == 'Q')
            cout << "Bye!" << endl;
       else 
            cout << "Illegal input" << endl;

    }while (choice != 'Q');
    return 0;
}

char displaymenu(int &num1 = num1, int &num2 = num2){
    char choice;
    cout << '+' << "______________________________" << '+' <<endl;
    cout << '|'<<"Choose an option: " <<"            |"<<endl; 
    cout << '|'<<"    A: Check if even          |" <<endl;
    cout << '|'<<"    B: Check if divisible     |" <<endl;
    cout << '|'<<"    Q: Quit                   |" <<endl;
    cout << '+' << "______________________________" << '+' <<endl;
    cout << "   Reply: ";
    cin>> choice>> num1>> num2;
    return choice;
    }

bool checkeven(int num1){
    if (num1 % 2 == 0)
        return true;
    else
        return false;
    } 

bool divisible(int num1, int num2){

    if (num1 % num2 == 0)
        return true;
    else
        return false;
    }

1 个答案:

答案 0 :(得分:0)

我不打算用一个完整的解决方案回答(你可以随意改进你的问题,以便以后得到更好的答案),但关于问题标题,这里有一些提示。

您的声明

char displaymenu(int num1, int num2);

和你的定义

char displaymenu(int &num1 = num1, int &num2 = num2)

应具有相同的签名。要传递引用,请将声明更改为

char displaymenu(int &num1, int &num2);

此外,由于您通过引用传输值,因此您应该删除int num1, num2 = 0;下方的全局变量using namespace std;。它们不再需要了。然后,通过删除(不工作)标准值赋值来修复displaymenu函数定义。在那之后,至少编译器应该接受你的代码,只是在你执行它时它不会真的适用于某些情况。