Как установить параметры по умолчанию, если пользователь не вводит другой - PullRequest
2 голосов
/ 26 мая 2020
#include <iostream>

class Person {
    friend std::ostream &operator<<(std::ostream &os, const Person &person);
    std::string name;
    int age;
public:
    std::string get_name () {return name;}
    int get_age() {return age;}
    Person() : name{"Unknown"}, age{0} {}
    Person(std::string name, int age) : name{name}, age{age} {}
};

std::ostream &operator<<(std::ostream &os, const Person &person) {
    os << person.name << ": " << person.age;
    return os;
}

int main () {
    Person Austin{"Austin", 12}; 
}

Я пытаюсь получить его там, где для своего имени я ввожу «Остин», но если я не введу возраст, он автоматически получит 0, потому что я не ввел возраст.

Ответы [ 2 ]

3 голосов
/ 26 мая 2020

Начиная с C ++ 11, вы можете использовать делегирующие конструкторы : вы можете предоставить дополнительную перегрузку конструктора, которая принимает только std::string для имени и делегатов в существующий конструктор, который принимает два аргумента, std::string и int. Затем просто передайте 0 в качестве второго аргумента делегированному конструктору:

Person(std::string name) : Person(name, 0) {}

То есть Person(std::string) будет делегирующим конструктором , а существующий Person(std::string, int) - делегирован один.


Другой подход - использовать аргумент по умолчанию для второго параметра существующего конструктора, который принимает оба std::string и int:

Person(std::string name, int age = 0) : name{name}, age{age} {}

Недостатком этого последнего подхода является то, что аргумент по умолчанию всегда компилируется непосредственно в клиентском коде. Это потребовало бы перекомпиляции клиентского кода при изменении аргумента по умолчанию.

1 голос
/ 26 мая 2020

C ++ имеет параметры по умолчанию, используйте их.

Person(std::string name, int age=0) : name{name}, age{age} {}

Выполняет именно то, что вы просили

int main () {
    Person Austin{"Austin"}; 
    std::cout << Austin << std::endl; //prints out "Austin: 0"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...