如何仅使用函数访问私有变量

时间:2014-10-13 13:27:35

标签: c++ encapsulation

#include <iostream>

using namespace std;

int main()
{
    asksUser();
    printLarger(int, int);
    return 0;
}

int asksUser()
{
    int num1, num2;
    cout << "Enter number ";
    cin >> num1;
    cout << "Enter number ";
    cin >> num2;
    return num1;
    return num2;
}

int printLarger(int num1, int num2)
{
 //Will compare the two ints and print out biggest

}

所以我有一个简单的问题,我可以很容易地在主要部分完成,但我想,为什么不尝试做我如何在清洁代码中教授并将所有东西分成微小的功能。虽然我的功能仍然做了两件事,但这并不是他们所希望的......事实证明这并不像我想象的那么简单。

3 个答案:

答案 0 :(得分:2)

你不能两次返回,但你不必:首先写一个函数的一个目的是重用它的逻辑。

您可以编写一个返回askUser的函数int,并从main调用它两次,如下所示:

int a = askUser();
int b = askUser();
printLarger(a, b);

答案 1 :(得分:0)

你不能连续两个返回语句,只返回第一个,第二个永远不会执行。

您可以按如下方式分解逻辑(尽管函数名称现在有点误导)。

int main()
{
    int larger = asksUser();
    cout << "Larger number is: " << larger << endl;
    return 0;
}

int asksUser()
{
    int num1, num2;
    cout << "Enter number ";
    cin >> num1;
    cout << "Enter number ";
    cin >> num2;

    return printLarger(num1, num2);
}

int printLarger(int num1, int num2)
{
    return num1 > num2 ? num1 : num2;
}

修改
要在没有ternary expression的情况下重新编写printLarger函数,同样的想法是:

int printLarger(int num1, int num2)
{
    if (num1 > num2)
        return num1;
    else
        return num2;       
}

答案 2 :(得分:0)

在C ++中,您只能从函数返回一次,因为永远不会达到第二次返回调用。您可以拆分这两个调用,以便您调用函数askUser两次,或者在C ++ 11标准中,您可以返回元组:

#include <algorithm>
#include <iostream>
#include <tuple>

std::tuple<const int , const int> asksUser ( const int * numbers , const int num ) {
    int number1, number2;
    cout << "Enter number ";
    cin >> number1;
    cout << "Enter number ";
    cin >> number2;

    return std::make_tuple( *number1 , *number ) ;
}

int printLarger(std::tuple<const int , const int> result)
{
    /*
     * Will compare the two ints and print out biggest
     * std::get<0>(result) will contain number1
     * std::get<0>(result) will contain number2
     */
}

int main( ) {
    std::tuple<const int , const int> result = asksUser() ;
    printLarger( result ) 
    return 0 ;
}

但是你为什么要分成小功能呢?大多数情况下,您可以在其他地方重用代码块。从用户获取两个数字并返回它们的函数可能很有用,但是不能从用户返回单个值的函数是否可以重复使用?