Я начинающий С++, но не начинающий программист. Я пытаюсь изучить С++ (С++ 11), и это для меня неясное самое главное: прохождение параметров.
Я рассмотрел эти простые примеры:
-
Класс, который имеет все его элементы примитивных типов:
CreditCard(std::string number, int expMonth, int expYear,int pin):number(number), expMonth(expMonth), expYear(expYear), pin(pin)
-
Класс, который имеет в качестве членов примитивные типы + 1 сложный тип:
Account(std::string number, float amount, CreditCard creditCard) : number(number), amount(amount), creditCard(creditCard)
-
Класс, который имеет в качестве членов примитивные типы + 1 набор некоторого сложного типа:
Client(std::string firstName, std::string lastName, std::vector<Account> accounts):firstName(firstName), lastName(lastName), accounts(accounts)
Когда я создаю учетную запись, я делаю это:
CreditCard cc("12345",2,2015,1001);
Account acc("asdasd",345, cc);
Очевидно, что кредитная карта будет скопирована дважды в этом сценарии. Если я переписываю этот конструктор как
Account(std::string number, float amount, CreditCard& creditCard)
: number(number)
, amount(amount)
, creditCard(creditCard)
будет один экземпляр. Если я переписал его как
Account(std::string number, float amount, CreditCard&& creditCard)
: number(number)
, amount(amount)
, creditCard(std::forward<CreditCard>(creditCard))
Будет сделана 2 хода и нет копии.
Я думаю, иногда вам может понадобиться скопировать некоторый параметр, иногда вы не хотите копировать, когда вы создаете этот объект.
Я пришел из С# и, будучи использованным для ссылок, мне немного странно, и я думаю, что для каждого параметра должно быть 2 перегрузки, но я знаю, что я ошибаюсь.
Есть ли какие-либо рекомендации о том, как отправлять параметры на С++, потому что я действительно нахожу его, допустим, не тривиальным. Как бы вы справились со своими примерами, представленными выше?