关于传递临时对象的一个问题

发表于:2007-05-26来源:作者:点击数: 标签:
通过常量引用过来的对象不能调用成元函数.否则会出现类似:'function' : number overloads have no legal conversions for 'this' pointer的错误, 除了删掉参数中的const外,还有什么解决办法吗? 代码: #include stdafx.h #include class X { int i; public:
通过常量引用过来的对象不能调用成元函数.否则会出现类似:'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;
}


原文转自:http://www.ltesting.net

评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)