Необязательный аргумент в функции
Буквально недавно пересел с игры python на с++, пока все нормально, но никак не могу понять, как мне сделать так чтобы, если аргумент в функцию не передавали, он имел "Никакой" тип, как None в python. Пример: есть класс Dog с конструктором
class Dog
{
public:
std::string name;
std::string color;
std::vector<Dog> parents;
Dog(std::string name, std::string color, std::vector<Dog> parents){
this -> name = name;
this -> color = color;
this -> parents = parents;
};
}
Если у Dog'a нет "родителей" я бы в python просто присвоил стандартное значение parents = None (спасибо динамической типизации) Пример на python:
class Dog:
def __init__(self, name, color, parents = None):
self.name = name
self.color = color
self.parents = parents
Ответы (2 шт):
Пока писал вопрос, понял как это можно сделать, лол. Всего лишь написать
Dog(std::string name, std::string color, std::vector<Dog> parents = {});
т.е присвоить пустой вектор по умолчанию, но теперь, если будете обращаться к вектору parents, а точнее к тому, что в нем находится, нужно проверять, пустой ли вектор или нет иначе можно случайно обратиться к несуществующим "родителям"
Ну, если у собачки либо 0, либо 2 родителя, то пустой массив нормально. Если надо все-таки сделать отдельные поля для папы-мамы, то "в качестве None" применяется std::optional.
З.Ы. В C++ для инициализации членов класса в конструкторе обычно используют список инициализации, т.е. : ПолеКласса1(Параметр1), ПолеКласса2(Параметр2), который идет между круглой скобкой объявления конструктора и фигурной скобкой. Так что часто в самом конструкторе остаются только "пустые" фигурные скобки.