C++ 从成员函数到友元函数的转换
我的任务是将所有成员函数转换为友元函数,并添加一个副本构造函数。我没有真正理解本周的讲座。请大家在这里转换任意两个函数(一个是访问函数,另一个是来自加法/乘法块)。只有一个函数,其余的我来做。先发制人C++ 从成员函数到友元函数的转换,c++,class,oop,object,uml,C++,Class,Oop,Object,Uml,我的任务是将所有成员函数转换为友元函数,并添加一个副本构造函数。我没有真正理解本周的讲座。请大家在这里转换任意两个函数(一个是访问函数,另一个是来自加法/乘法块)。只有一个函数,其余的我来做。先发制人 #include <iostream> #include <string.h> using namespace std; class fraction { long num; long den; public: fraction(long,long); frac
#include <iostream>
#include <string.h>
using namespace std;
class fraction
{
long num;
long den;
public:
fraction(long,long);
fraction();
~fraction();
void setNum ( long );
void setDen ( long );
long getNum ( void );
long getDen ( void );
void print (void);
void add (fraction, fraction);
void sub (fraction, fraction);
void mult (fraction, fraction);
void div (fraction, fraction);
void inc (fraction);
} ; // end of class fraction
long gcd (long x, long y);
fraction::fraction(long l_num, long l_den)
{
num = l_num;
den = l_den;
}
fraction::fraction()
{
}
fraction::~fraction()
{
}
void fraction::setNum (long l_num )
{
num = l_num ;
}
void fraction::setDen (long l_den )
{
den = l_den ;
}
long fraction::getDen ( )
{
return den ;
}
long fraction::getNum ( )
{
return num ;
}
void fraction:: print (void)
{
cout<<num/gcd(num,den)<<"/"<<den/gcd(num,den) <<endl;
}
void fraction::add (fraction f1, fraction f2)
{
num = (f1.getNum ( ) * f2.getDen ( )) + ( f1.getDen ( ) * f2.getNum ( ) );
den = (f1.getDen ( ) * f2.getDen ( ));
}
void fraction::sub (fraction f1, fraction f2)
{
num = (f1.getNum ( ) * f2.getDen ( )) - ( f1.getDen ( ) * f2.getNum ( ) );
den = (f1.getDen ( ) * f2.getDen ( ));
}
void fraction::mult (fraction f1, fraction f2)
{
num = (f1.getNum ( ) * f2.getNum ( ));
den = (f1.getDen ( ) * f2.getDen ( ));
}
void fraction::div(fraction f1, fraction f2)
{
num = (f1.getNum ( ) * f2.getDen ( ));
den = (f1.getDen ( ) * f2.getNum ( ));
}
void fraction::inc (fraction f1)
{
num = (f1.getNum ( )) + ( f1.getDen ( ) );
den = (f1.getDen ( ) );
}
long gcd (long x, long y)
{
return (x == 0) ? y : gcd (y%x, x);
}
int main ( )
{
// define seven instances of the class fraction
fraction f1(1L,2L),f2(3L,4L),f3, f4,f5,f6, f7;
//set values for the numerator and denominator to f1 and print them
//f1.setDen( 2L);
//f1.setNum( 0L);
f1.print();
//set values for the numerator and denominator to f2 and print them
//f2.setDen( 4L);
//f2.setNum( 3L);
f2.print();
f3.add( f1, f2);
f3.print();
f4.sub( f1, f2);
f4.print();
f5.mult( f1, f2);
f5.print();
f6.div( f1, f2);
f6.print();
f7.inc(f1);
f7.print();
return 0;
}
#包括
#包括
使用名称空间std;
类分数
{
长数;
龙穴;
公众:
分数(长,长);
分数();
~fraction();
void setNum(长);
无效设置(长);
长getNum(void);
朗格登(无效);
作废打印(作废);
空隙添加(分数,分数);
空隙子(分数,分数);
空隙倍数(分数,分数);
空隙率(分数,分数);
void公司(分数);
} ; // 期末分数
长gcd(长x,长y);
分数:分数(长l_数,长l_数)
{
num=l_num;
den=l_den;
}
分数::分数()
{
}
分数::~分数()
{
}
空隙率::setNum(长l_num)
{
num=l_num;
}
空隙率::塞顿(长l_den)
{
den=l_den;
}
长分数::getDen()
{
返回巢穴;
}
长分数::getNum()
{
返回num;
}
空隙率::打印(空隙)
{
cout复制构造函数可以如下所示
fraction( const fraction & );
并被定义为
fraction::fraction( const fraction &rhs ) : num( rhs.num ), den( rhs.den )
{
}
我会将算术函数声明为返回一个分数类型的对象
比如说
friend const fraction add( const fraction &, const fraction & );
并将其定义为
const fraction add( const fraction &lhs, const fraction &rhs )
{
return fraction( lhs,getNum() * rhs.getDen() + rhs.getNum() * lhs.getDen(),
lhs.getDen() * rhs.getDen() );
}
考虑到函数getNum和getDen必须声明为
long getNum() const;
long getDen() const;
函数inc可以声明为
friend const fraction inc( fraction & );
或作为
取决于它是模拟增量后操作还是增量前操作。如何编写getNum()函数?@user2951660 long fraction::getNum()const{return num;}Blagodarya..Thanx vladbut getName和setName不能转换为友元函数,不是吗?@YourFavoriteNoob如果你愿意,你可以将它们转换为友元函数。但我看不出这有什么意义。通常Getter和Setter都是成员函数。
friend fraction & inc( fraction & );