Создание функции друга для доступа к закрытым переменным из двух классов
Проблема заключалась в том, чтобы получить доступ к закрытым переменным для вывода из двух разных классов, добавив функцию, являющуюся другом обоих классов.
class Salesperson;
class Sale {
private:
string date;
double total;
int SalespersonIdNum;
public:
Sale(string, double, int);
friend void display(Sale &, Salesperson &);
};
Sale::Sale(string d, double t, int S) {
>>d = date;
>>t = total;
>>S = SalespersonIdNum;
}
//Salesperson class
class Salesperson {
private:
int idNum;
string lastName;
public:
Salesperson(int, string);
friend void display(Sale &, Salesperson &);
};
Salesperson::Salesperson(int i, string l) {
>>i = idNum;
>>l = lastName;
}
void display(Sale &s, Salesperson &sp) {
//Output Sale info
cout << " ID of person who completed sale: " << s.SalespersonIdNum << endl;
cout << " Sale Total: " << s.total << endl;
cout << " Sale Date: " << s.date << endl;
//Output Saleperson info
cout << " Sales Person ID: " << sp.idNum << endl;
cout << " Sales Person Last Name: " << sp.lastName << endl << endl;
}
int main() {
Sale s1("10/06/2008", 78.45, 123);
Salesperson emp1(123, "Pelletier");
display(s1, emp1);
Sale s2("05/21/2010", 162.59, 321);
Salesperson emp2(321, "Howel");
display(s2, emp2);
return 0;
}
Функция отображения в идеале должна иметь возможность доступа к переменным, определенным моими определениями объектов, но когда я иду к запуску и отображаю их, функция отображает это.
ID of person who completed sale: 124
Sale Total: 2.07482e-317
Sale Date:
Sales Person ID: 6299816
Sales Person Last Name:
ID of person who completed sale: 1677231376
Sale Total: 2.07417e-317
Sale Date:
Sales Person ID: 1
Sales Person Last Name:
...Program finished with exit code 0
Press ENTER to exit console.
Насколько я понимаю, функция друга должна работать так, но, возможно, проблема заключается в конструкторах, но я думаю, что они также сделаны правильно. Что касается вывода, может быть, я выводить адреса памяти или что-то, но я понятия не имею, что
РЕДАКТИРОВАТЬ: >> Я чертовски отстал
1 ответ
Ваши назначения находятся в неправильном направлении в конструкторе.
Sale::Sale(string d, double t, int S) {
d = date;
t = total;
S = SalespersonIdNum;
}
Они должны быть:
Sale::Sale(string d, double t, int S) {
date = d;
total = t;
SalespersonIdNum = S;
}
Будет лучше использовать синтаксис инициализации списка.
Sale::Sale(string d, double t, int S) :
date(d),
total(t),
SalespersonIdNum(S) { }