2015-06-19 2 views
-3

В следующем коде:Почему функция всегда относится к одному конкретному параметру?

int sum(int a=40, int b=20) 
{ 
    int result; 

    result = a + b; 

    return (result); 
} 

int main() 
{ 

    int a = 100; 
    int b = 200; 
    int result; 


    result = sum(a, b); 
    cout << "Total value is :" << result << endl; 


    result = sum(a); 
    cout << "Total value is :" << result << endl; 

    return 0; 
} 

Это производит:

Total value is : 300 
Total value is : 120 

Почему:

sum(a) 

добавить (интермедиат а) в 2-ом блоке к (INT б) в 1-м блоке?

Im confused, почему значение (b) в 1-м блоке используется в (sum (a)), но значение (a) в 1-м блоке игнорируется.

+2

Uhm ... вы должны получить начальный учебник и некоторую информацию о том, какие параметры по умолчанию и как они работают. Я не могу понять, что вас беспокоит, так это то, что имена аргументов функции и имена в «main» одинаковы? вы можете переименовать аргументы функции в 'x' и' y' и посмотреть, не позволяет ли это путать? –

+1

«Почему функция всегда относится к одному конкретному параметру?» Что это значит? – juanchopanza

+0

@ DavidRodríguez - dribeas Я использую TutorialsPoint, онлайн-руководство для C++ и Im в разделе «Параметры по умолчанию для параметров». – OpenTheCSV

ответ

1

В функции sum Вы используете default arguments. Вот почему, когда вы звоните

result = sum(a); // where a = 100 and the second parameter is ommited 

в функции sum, первый параметр принимает значение этого вызывающего абонента a (= 100), и как второй параметр отсутствует конец вызывающего абонента, по умолчанию будет использоваться в качестве b. Таким образом, результат

100 + 20 
= 120 

Как Дэвид Родригес предложил в первом комментарии, используйте разные имена переменных (скажем sum (int x, int y)) без всякой двусмысленности и лучшего понимания.

1
int sum(int a=40, int b=20) { 
    ... 
} 

объявляет параметры a быть 40 и b быть в 20, если не указано иное. Это компилятор, поэтому sum(a) становится sum(a, 20) (b не указано). Аналогично этому sum() становится sum(40, 20). a и b в вашем методе sum: default parameters.

0

Для того, чтобы сделать его короче:

int sum(int a=40, int b=20) 
{ 
    return a + b; 
} 

int main() 
{ 
    int a = 100; 
    int b = 200; 

    cout << "Total value is :" << sum(a, b) << endl; 
    cout << "Total value is :" << sum(a) << endl; 

    return 0; 
} 

В sum(a,b) обоих параметров имеют значения => он делает a+b =>100 + 200, который 300.

В sum(a) второй параметр не задан, то функция используется значение по умолчанию (то есть: 20) =>a + 20 =>100 + 20 которое 120


a & b вы определяете в вашем главном не функция sum

0

Ну, вы должны немного прочитать параметры по умолчанию на C++. Там, где вы находитесь, я рекомендую немного исследовать перегрузку, поскольку они несколько связаны.

При первом вызове функции sum() вы предоставляете оба параметра вызову, поэтому переменные a и b, которые вы объявили, используются, поэтому вы получаете 100 + 200 = 300.Во втором вызове tho вы предоставляете только один параметр, поэтому второй использует значение параметра по умолчанию, то есть a = 100, b получает значение по умолчанию (20), поэтому вы получаете 100 + 20 = 120.

0

Когда вы пишете функцию типа returntype Имя_функции (data_type some_value), то это называется параметрами по умолчанию.

Для например: если вы пишете функцию, как, INT calculate_area (интермедиат длина = 20, ширина ИНТА = 25)

Тогда при вызове этой функции из основных, вы можете передавать значение длину и ширину как это,

int main() { 
    int a=50; 
    int b=60; 
    calculate_area(a,b); 
} 

Или вы можете назвать это, как это ...

int main() { 
    calculate_area(); 
} 

Чувствуете разницу, мы не проходит какой-либо параметр, по-прежнему является действительным с все в функции, потому что в этом случае будут рассмотрены значения по умолчанию, указанные вами для длины и ширины, которые в этом случае равны 20 & 25.

И о переменных 'a' & 'b' в вашем коде, похоже, что вы путаетесь между именем переменных. Main() и Sum() - две разные функции. «a» суммы не имеет ничего общего с «a» основного. Вы поймете это, когда будете читать, как переменные хранятся в стеке и все.

+1

Вы можете использовать уценку внутри редактора для кода, выбрать регион и нажать Ctrl-K (или нажать кнопку {}). –

Смежные вопросы