c++匿名对象,该如何解决

c++匿名对象
      今天看到c++程序中一个匿名对象,但不知道使用该对象的优点为什么要使用匿名对象,想知道匿名对象在什么情况下使用,是用的好处
------解决思路----------------------
作为函数参数传进去,此时变量名有没有就显得无关紧要。

匿名对象不好理解,那么匿名变量你能理解么?看代码:
int i = 1;
int j = 2;
cout << add(i, j);
在这里,如果i j只是为add方法的参数而准备,那么它们的名字没有意义,我们这么写
cout << add(1, 2);
是不是也一样?
此时你能说出1, 2这两个值的变量名是什么么?它们其实就是匿名的变量。
------解决思路----------------------
個人習慣吧,DEBUG比較容易。
------解决思路----------------------
匿名对象,我的理解是:实际上就是为了调用一下某个类的函数(可以是构造函数,也可以是其他函数)。c++会优化匿名对象的,匿名对象作为operator=的参数时(例如例1)会省略一次构造函数调用。
废话不多说,先来俩我自己写的简单的例子,自己体会一下匿名对象。
例1,为了调用类里的构造函数:
一个分数类,实现其operator+的时候,返回一个分数对象,可以返回一个匿名对象。请重点看fenshu.cpp中operator+的实现,还有main.cpp里main函数中的内容。

例2,为了调用类里其他函数
需要约分两个数,可以直接调用匿名对象的函数来实现,请重点看main.cpp里main函数中的内容。


//fenshu.h
class Fenshu
{
public:
    Fenshu( int a = 1, int b = 2 ); //***例1请重点看这里****
    ~Fenshu();
    Fenshu operator+( const Fenshu& a );//***例1请重点看这里****
    void Show();
    int gys();//***公约数函数,例2请重点看这里****
    int yuefen();
private:
    int fz;
    int fm;
};


//fenshu.cpp
#include <iostream>
#include "fenshu.h"
void Fun( Fenshu *p );
using namespace std;

int gys( int a, int b )
{
    if ( b == 0 ) return a;
    return gys( b, a%b );
}
Fenshu::Fenshu( int a , int b  ) : fz(a), fm(b)
{
    yuefen();
}

Fenshu::~Fenshu()
{

}
Fenshu Fenshu::operator+( const Fenshu& a )
{
/*正常的做法:
    Fenshu t;
    t.fm = fm * a.fm;
    t.fz = fz * a.fm + a.fz * fm;
    t.yuefen();
    return t;
*/
    return FenShu(fz * a.fm + a.fz * fm, fm * a.fm) ; //***例1请看这里,直接返回一个匿名对象***
}
int Fenshu::yuefen()
{
    int g = gys();
    fz /= g;
    fm /= g;
    if ( fm < 0 )
    {
        fz = -fz;
        fm = -fm;
    }
}
int Fenshu::gys()
{
    return ::gys( fz, fm );
}

void Fenshu::Show()
{
    cout << fz << '/' << fm << endl;

}



//main.cpp
#include <iostream>
#include "fenshu.h"
using namespace std;
int main()
{
    cout << Fenshu( 12, 16 ).gys() << endl; //例2请重点看这里,直接输出12和16的公约数
    (Fenshu(1,8)+Fenshu(3,8)).Show();//例1请重点看这里,直接输出12和16的公约数
    (Fenshu(1,2)+Fenshu(1,3)).Show();//例1请重点看这里,直接输出12和16的公约数
    return 0;
}

------解决思路----------------------
很多临时对象就是匿名对象