Передача объекта класса в класс
У меня есть класс 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 шт):
Как я понимаю, вы бы хотели в вашем примере убрать конструктор по умолчанию из Money и чтоб все работало :)
Эт можно.
Дописываем в конструктор Account инициализацию Money - которых у вас две: базовый класс и член класса:
Account(string FIO, long Ident, int Pin, Money M)
:Money(M),m(M)
Voila!
Только я бы передавал Money в конструктор по ссылке: к чему лишнее копирование? И, кстати о копировании... Ваш класс достаточно прост, чтобы генерируемый конструктор копирования работал нормально, но если он станет посложнее, то вам надо будет написать свой конструктор копирования и деструктор...
А теперь в качестве ответной любезности поясните, зачем у вас и наследование, и композиция в одном флаконе? Счет все же НЕ ЯВЛЯЕТСЯ деньгами, так зачем наследование? А если вы решили, что наследование обязательно - зачем тогда член Money m?