为什么我不能将该函数ColPeekHeight()用作l值?
class View
{
public:
int ColPeekHeight(){ return _colPeekFaceUpHeight; }
void ColPeekHeight( int i ) { _colPeekFaceUpHeight = i; }
private:
int _colPeekFaceUpHeight;
};
...
{
if( v.ColPeekHeight() > 0.04*_heightTable )
v.ColPeekHeight()-=peek;
}
Run Code Online (Sandbox Code Playgroud)
编译器抱怨v.ColPeekHeight()-=peek.我怎样才能ColPeekHeight()得到l值?
通过引用返回成员变量:
int& ColPeekHeight(){ return _colPeekFaceUpHeight; }
Run Code Online (Sandbox Code Playgroud)
要使您的类成为一个好类,请定义该函数的const版本:
const int& ColPeekHeight() const { return _colPeekFaceUpHeight; }
Run Code Online (Sandbox Code Playgroud)
当我宣布函数两个
const小号
当您想要将对象传递给您不希望它修改对象的函数时.举个例子:
struct myclass
{
int x;
int& return_x() { return x; }
const int& return_x() const { return x; }
};
void fun(const myclass& obj);
int main()
{
myclass o;
o.return_x() = 5;
fun(o);
}
void fun(const myclass& obj)
{
obj.return_x() = 5; // compile-error, a const object can't be modified
std::cout << obj.return_x(); // OK, No one is trying to modify obj
}
Run Code Online (Sandbox Code Playgroud)
如果将对象传递给函数,则可能不希望实际上一直更改它们.因此,为了防止这种变化,您需要声明const成员函数的版本.它不一定是每个成员函数都有两个版本!它取决于它自己的功能,它是天生地修改功能:)
第一个const说返回值是常量.第二个const说成员函数return_x 不会更改对象(只读).