中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > C/C++
关于传递临时对象的一个问题
作者:未知 时间:2005-09-13 23:28 出处:Blog.ChinaUnix.net 责编:chinaitpower
              摘要:关于传递临时对象的一个问题
通过常量引用过来的对象不能调用成元函数.否则会出现类似:'function' : number overloads have no legal conversions for 'this' pointer的错误,
除了删掉参数中的const外,还有什么解决办法吗?

代码:
#include "stdafx.h"
#include
class X {
int i;
public:
X();
int x();
void x(int x);
};

X::X()
{
i = 1;
}

int X::x()
{
return i;
}

void X::x(int x)
{
i = x;
}

X f()
{
return X();
}

void g1(X& x)
{
// cout << " non-const reference:" << x.x() << endl;
}

void g2(const X& x)
{
// cout << " const reference:" << ends << "get x.i:" << x.x() << endl;

// int temp =3;
// cout << "set x.i:" << temp << endl;
// x.x(temp);
// cout << "get x.i:" << x.x() << endl;
}

int main(int argc, char* argv[])
{
g1(f());
g2(f());

return 0;
}

将成元函数改成const的然后调用:
#include "stdafx.h"
#include
class X {
int i;
public:
X();
int x()
const ;
void x(int x);
};

X::X()
{
i = 1;
}

int X::x()
const
{
return i;
}
void X::x(int x)
{
i = x;
}
X f()
{
return X();
}

void g1(X& x)
{
cout << " non-const reference:" << x.x() << endl;
}

void g2(const X& x)
{
cout << " const reference:" << ends << "get x.i:" << x.x() << endl;

// int temp =3;
// cout << "set x.i:" << temp << endl;
// x.x(temp);
// cout << "get x.i:" << x.x() << endl;
}

int main(int argc, char* argv[])
{
g1(f());
g2(f());

return 0;
}

注:如果声明一个成员函数为const函数,则等于告诉编译器可以为一个const对象调用这个函数。非
const对象也可以调用这个函数,为保证函数的常量性,在函数定义中,如果我们改变对象中的任何成员或调用任何非const成元函数,编译器都会报错
即改为如下是不对的:
#include "stdafx.h"
#include <iostream.h>
class X {
    int i;
public:
    X();
     int x() const;
    void x(int x) const ;
};

X::X()
{
    i = 1;
}

  int X::x() const
{
    return i;
}
 void X::x(int x)  const
{
    i = x;
}
X f()
{
    return X();
}

void g1(X& x)
{
    cout << " non-const reference:" << x.x() << endl;
}

void g2(const X& x)
{
    cout << " const reference:" << ends << "get x.i:" << x.x() << endl;
   
    int temp =3;
    cout << "set x.i:" << temp << endl;
//    x.x(temp);
    cout << "get x.i:" << x.x() << endl;
}

    int main(int argc, char* argv[])
{
        g1(f());
        g2(f());

    return 0;
}


关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有