永发信息网

为什么我的友元函数不能访问私有数据成员?

答案:1  悬赏:20  手机版
解决时间 2021-04-05 23:20
  • 提问者网友:川水往事
  • 2021-04-05 19:25
//Rational.h
#ifndef RATIONAL_H
#define RATIONAL_H

class Rational {
public:
Rational(int a=0, int b=1);
Rational operator +(const Rational &a) const;
Rational operator -(const Rational &a) const;
Rational operator *(const Rational &a) const;
Rational operator /(const Rational &a) const;
bool operator ==(const Rational &a) const;
friend ostream & operator << (ostream &out,const Rational &a);
private:
int numerator;
int denominator;
void optimization(); //使有理数约去公因子
};
#endif
//Rational.cpp
#include <iostream>
using namespace std;
#include "Rational.h"

Rational::Rational(int a, int b){
numerator=a;
denominator=b;
optimization();
}

Rational Rational::operator +(const Rational &a) const{
Rational b;
b.numerator=numerator*a.denominator + denominator*a.numerator;
b.denominator=denominator * a.denominator;
b.optimization();
return b;
}

Rational Rational::operator -(const Rational &a) const{
Rational b;
b.numerator=numerator*a.denominator - denominator*a.numerator;
b.denominator=denominator * a.denominator;
b.optimization();
return b;
}

Rational Rational::operator *(const Rational &a) const{
Rational b;
b.numerator=numerator * a.numerator;
b.denominator=denominator * a.denominator;
b.optimization();
return b;
}

Rational Rational::operator /(const Rational &a) const{
Rational b;
b.numerator=numerator * a.denominator;
b.denominator=denominator * a.numerator;
b.optimization();
return b;
}

bool Rational::operator ==(const Rational &a) const{
if(a.numerator==numerator && a.denominator==denominator)
return true;
else return false;
}

ostream & operator << (ostream &out,const Rational &a){
out<<a.numerator<<"/"<<a.denominator<<endl;
return out;
}

int gcd(int m,int n){
if (m < n){
int tmp = m;
m = n;
n = tmp;
}
if (n == 0) return m;
while (n > 0){
int tmp = m % n;
m = n;
n = tmp;
}
return m;
}

void Rational::optimization(){
int a=gcd(numerator,denominator);
numerator=numerator/a;
denominator=denominator/a;
}
//main.cpp
#include <iostream>
using namespace std;
#include "Rational.h"

void main(){
Rational r1(2,3),r2(4,6),r3(2,1),r4;
cout<<"r1="<<r1;
cout<<"r2="<<r1;
cout<<"r3="<<r1;
r4=r1+r3;
cout<<"r1+r3="<<r4;
cout<<"r3-r1="<<r3-r1;
cout<<"r1*r3="<<r1*r3;
cout<<"r1/r3="<<r1/r3;

}
最佳答案
  • 五星知识达人网友:有你哪都是故乡
  • 2021-04-05 20:36
LZ做的是一个有理数运算的程序吧
友元函数不能访问私有数据成员指的是编译报错还是输出问题?
就我看到的说一下
cout<<"r1="<<r1;
cout<<"r2="<<r1;
cout<<"r3="<<r1;
的部分输出的东西错了,改为一下会更好
cout<<"r1="<<r1<<endl;
cout<<"r2="<<r2<<endl;
cout<<"r3="<<r3<<endl;
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯