代码:
#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()
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函数,则等于告诉编译器可以为一个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;
}