Как передать необязательные аргументы методу в C ++? - PullRequest
82 голосов
/ 24 сентября 2010

Как передать необязательные аргументы методу в C ++? Любой фрагмент кода ...

Ответы [ 7 ]

109 голосов
/ 24 сентября 2010

Вот пример режима передачи в качестве необязательного параметра

void myfunc(int blah, int mode = 0)
{
    if (mode == 0)
        do_something();
     else
        do_something_else();
}

, вы можете вызывать myfunc двумя способами, и оба действительны

myfunc(10);     // Mode will be set to default 0
myfunc(10, 1);  // Mode will be set to 1
35 голосов
/ 24 сентября 2010

Важное правило относительно использования параметров по умолчанию:
Параметры по умолчанию должны быть указаны в самом правом конце, после того, как вы укажете параметр значения по умолчанию, вы не сможете снова указать параметр не по умолчанию. пример:

int DoSomething(int x, int y = 10, int z) -----------> Not Allowed

int DoSomething(int x, int z, int y = 10) -----------> Allowed 
22 голосов
/ 14 июля 2016

Для некоторых из вас может быть интересно, что в случае нескольких параметров по умолчанию:

void printValues(int x=10, int y=20, int z=30)
{
    std::cout << "Values: " << x << " " << y << " " << z << '\n';
}

Учитывая следующие вызовы функций:

printValues(1, 2, 3);
printValues(1, 2);
printValues(1);
printValues();

Получается следующий вывод:

Values: 1 2 3
Values: 1 2 30
Values: 1 20 30
Values: 10 20 30

Ссылка: http://www.learncpp.com/cpp-tutorial/77-default-parameters/

13 голосов
/ 24 сентября 2010

Используйте параметры по умолчанию

template <typename T>
void func(T a, T b = T()) {

   std::cout << a << b;

}

int main()
{
    func(1,4); // a = 1, b = 4
    func(1);   // a = 1, b = 0

    std::string x = "Hello";
    std::string y = "World";

    func(x,y);  // a = "Hello", b ="World"
    func(x);    // a = "Hello", b = "" 

}

Примечание.

8 голосов
/ 24 сентября 2010

Как правило, путем установки значения по умолчанию для параметра:

int func(int a, int b = -1) { 
    std::cout << "a = " << a;
    if (b != -1)        
        std::cout << ", b = " << b;
    std::cout << "\n";
}

int main() { 
    func(1, 2);  // prints "a=1, b=2\n"
    func(3);     // prints "a=3\n"
    return 0;
}
7 голосов
/ 24 сентября 2010

С запятыми, разделяющими их, как параметры без значений по умолчанию.

int func( int x = 0, int y = 0 );

func(); // doesn't pass optional parameters, defaults are used, x = 0 and y = 0

func(1, 2); // provides optional parameters, x = 1 and y = 2
2 голосов
/ 20 июня 2019

Чтобы следовать приведенному здесь примеру, но для пояснения синтаксиса с использованием заголовочных файлов, объявление функции содержит необязательное значение параметра по умолчанию.

myfile.h

void myfunc(int blah, int mode = 0);

myfile.cpp

void myfunc(int blah, int mode) /* mode = 0 */
{
    if (mode == 0)
        do_something();
     else
        do_something_else();
}
...