c++匿名对象

tksoy 2014-09-20 07:38:18
今天看到c++程序中一个匿名对象,但不知道使用该对象的优点为什么要使用匿名对象,想知道匿名对象在什么情况下使用,是用的好处
...全文
469 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengzhixi 2014-09-23
  • 打赏
  • 举报
回复
很多临时对象就是匿名对象
lx3275852 2014-09-23
  • 打赏
  • 举报
回复
匿名对象,我的理解是:实际上就是为了调用一下某个类的函数(可以是构造函数,也可以是其他函数)。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;
}
aa5566f4 2014-09-21
  • 打赏
  • 举报
回复
個人習慣吧,DEBUG比較容易。
threenewbee 2014-09-21
  • 打赏
  • 举报
回复
作为函数参数传进去,此时变量名有没有就显得无关紧要。 匿名对象不好理解,那么匿名变量你能理解么?看代码: int i = 1; int j = 2; cout << add(i, j); 在这里,如果i j只是为add方法的参数而准备,那么它们的名字没有意义,我们这么写 cout << add(1, 2); 是不是也一样? 此时你能说出1, 2这两个值的变量名是什么么?它们其实就是匿名的变量。

64,650

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧