Передача объекта класса в класс

У меня есть класс Person и у него есть два конструктора: Person() и Person(string name).

У меня есть класс Worker и у него есть один конструктор: Worker(Person p).

Как мне передать Person с аргументом string name, потому что:

Person pers("Bob");
Worker(pers); // здесь сработает первый конструктор без аргумента и соответственно имя будет взято из Person().

Как это лучше реализовать? И в целом как работать?

Пример кода:

#include <iostream>
using namespace std;
 
class Money{
protected:
    string currency;
    long sum;
    void setSum(long Sum);
 
public:
    Money(string Currency, long Sum){
        currency = Currency;
        sum = Sum;
    }
 
    Money(){
        currency = "$";
        sum = 15000;
    }
 
    long getSum();
};
 
class Account: public Money{
private:
    string fio;
    long ident; //id
    int pin;
    Money m;
 
public:
    Account(string FIO, long Ident, int Pin, Money M){
        fio = FIO;
        ident = Ident;
        pin = Pin;
        m = M;
    }
 
    void addMoney(long Sum){
        setSum(sum + Sum);
    }
 
};
 
int main() {
    Money m("$", 1500);
    Account a("fhd", 3495834, 2241, m);
    a.addMoney(1500);
    cout << a.getSum() << endl; // print 16500
    return 0;
}

Ответы (1 шт):

Автор решения: Harry

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

Эт можно.

Дописываем в конструктор Account инициализацию Money - которых у вас две: базовый класс и член класса:

Account(string FIO, long Ident, int Pin, Money M)
    :Money(M),m(M)

Voila!

Только я бы передавал Money в конструктор по ссылке: к чему лишнее копирование? И, кстати о копировании... Ваш класс достаточно прост, чтобы генерируемый конструктор копирования работал нормально, но если он станет посложнее, то вам надо будет написать свой конструктор копирования и деструктор...

А теперь в качестве ответной любезности поясните, зачем у вас и наследование, и композиция в одном флаконе? Счет все же НЕ ЯВЛЯЕТСЯ деньгами, так зачем наследование? А если вы решили, что наследование обязательно - зачем тогда член Money m?

→ Ссылка