【发布时间】:2019-12-11 21:37:49
【问题描述】:
所以我一直在尝试重载 += 运算符,但它在 Class Item 中不起作用我尝试只让 += 运算符成为朋友,但它说成员仍然可以访问(注释行)我的第一个问题是为什么这不起作用,所以我让整个 Order 类成为朋友,现在它可以访问数据成员但是重载仍然不起作用
这是我的代码:项目类
#pragma once
#include"Order.h"
class Item
{
double Iprice;
public:
friend Order ;
//friend Order& Order::operator+=(Item);
Item(double p =0):Iprice(p){
}
~Item(void);
};
订单类别:
#pragma once
#include"Item.h"
#include<iostream>
using namespace std;
class Order
{
double Oprice;
int n_items;
friend ostream& operator<<(ostream& c , Order O );
public:
Order(double price =0, int n=0 ){
Oprice = price;
n_items = n;
}
Order& operator+=(Item I1){
n_items++;
Oprice += I1.Iprice;
return (*this);
}
};
主要功能:
#include<iostream>
#include"Item.h"
#include"Order.h"
using namespace std;
ostream& operator<<(ostream& c , Order O ){
c<< "Total Price = " << O.Oprice << "-- item Count = " << O.n_items << endl ;
return c ;
}
int main(){
Item t1;
t1 = 1000;
Item t2 = 100;
Item t3 = 10;
Order ord1;
Order ord2;
cout << (ord1 += t1);
}
提前致谢
【问题讨论】:
-
你有一个包含循环。不能有
a.h包括b.h和b.h包括a.h。您需要设计您的类,以便包含在没有循环的层次结构中。 -
这里可能的解决方案是使
Item不依赖于Order;给它一个公共的 getter 函数,而不是尝试与 Order 的 += 运算符交朋友
标签: c++ operator-overloading friend