c++ - 创建友元函数以访问两个类的私有(private)变量

标签 c++ class friend

问题是通过添加两个类的友元函数来访问两个不同类输出的私有(private)变量。

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.

根据我的理解,友元函数应该像那样工作,但问题可能出在构造函数中,但我认为它们也正确完成了。至于输出可能我输出内存地址什么的,但我对此一无所知

最佳答案

您的分配在构造函数中的方向错误。

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) { }

关于c++ - 创建友元函数以访问两个类的私有(private)变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50517343/

相关文章:

c++ - std::ostringstream 将登录放在错误的位置?

python - 将变量内容传递给 Python 中的类函数

c++ - 派生类可以访问作为内部类的友元的父类的 protected 内部类的私有(private)方法吗?

c++ - 指向在编译时已知值的指针的指针数组

c++ - 无法让 Helgrind/DRD 使用 C++11 线程

c++ - 如何从 C++ std::basic_ostream 派生并使 << 运算符虚拟?

c++ - 交替使用类作为浮点指针

c# - 从类传递值以显示在不同的表单上并以编程方式处理单击事件?

c++ - C++ 中的 friend 成员函数 - 前向声明不起作用

C++: friend 模板类/模板非类型参数