友元和重载的问题
#include "stdafx.h"
//#include "..\..\comm\Sales_item.h"
#include <iostream>
#include <string>
using namespace std;
class Sales_item
{
friend istream& operator>>(istream &in, Sales_item &s);
public:
Sales_item(): units_sold(0), revenue(0.0) {}
Sales_item(const string &book):isbn(book), units_sold(0), revenue(0.0){}
public:
Sales_item& operator+=(const Sales_item &);
public:
double avg_price() const;
inline bool same_isbn(const Sales_item &rhs) const { return isbn == rhs.isbn;}
private:
string isbn;
unsigned units_sold;
double revenue;
};
istream& operator>>(istream &in, Sales_item &s)
{
double price;
in >> s.isbn >> s.units_sold >> price;
if(in)
{
s.revenue = s.units_sold * price;
}
else
{
s = Sales_item();
}
return in;
}
inline Sales_item& Sales_item::operator+=(const Sales_item &rhs)
{
units_sold += rhs.units_sold;
revenue += rhs.revenue;
return *this;
}
inline double Sales_item::avg_price() const
{
if(units_sold)
{
return revenue / units_sold;
}
else
{
return 0;
}
}
int main(int argc, char* argv[])
{
Sales_item book;
/*
cout << "Enter transactions: " << endl;
while(cin >> book)
{
cout << "ISBN, number of copies sold, "
<< "total revenue, and average price are: "
<< endl;
cout << book << endl;
}
*/
return 0;
}error C2248: 'isbn' : cannot access private member declared in class 'Sales_item'
error C2248: 'units_sold' : cannot access private member declared in class 'Sales_item'
error C2248: 'revenue' : cannot access private member declared in class 'Sales_item'
...全文
相关推荐
实验二:友元和函数重载
总结,通过学习友元和函数重载,你可以更好地理解和编写C++程序,特别是在设计复杂的数据结构和算法时,这两个特性将大大增强你的编程能力。在实践中不断探索和练习,你会发现自己在解决实际问题时更加得心应手。
大学C++复习题.pdf
**继承特性**:静态成员可以被继承,友元和构造函数则不能。继承过程中,静态成员保持原样,而友元和构造函数不会被子类继承。9. **不允许重载的运算符**:C++中,不能重载`.
2021年一周学习总结笔记.docx
这部分内容涉及到硬件交互,初期学习可能会遇到困难,但随着理解加深,问题将迎刃而解。此外,还学习了C++的类的友元和操作符重载,但发现理解上仍有不足,需要通过额外的学习资料来加强理解。
友元和运算符重载.pdf
在C++编程语言中,友元和运算符重载是两个重要的特性,它们都与类的封装性有着密切的关系。友元是C++中用于破坏封装性的一种机制。
运算符单例友元重载作业
在编程领域,运算符单例友元重载是一种高级技巧,它涉及到面向对象设计模式、类的内部工作原理以及C++中的友元函数和运算符重载。让我们深入探讨这些概念,以便更好地理解和应用。


