【发布时间】:2013-04-15 04:48:22
【问题描述】:
来自关于const functions的MSDN页面
代码:
// constant_member_function.cpp
class Date
{
public:
Date( int mn, int dy, int yr );
int getMonth() const; // A read-only function
void setMonth( int mn ); // A write function; can't be const
private:
int month;
};
int Date::getMonth() const
{
return month; // Doesn't modify anything
}
void Date::setMonth( int mn )
{
month = mn; // Modifies data member
}
int main()
{
Date MyDate( 7, 4, 1998 );
const Date BirthDate( 1, 18, 1953 );
MyDate.setMonth( 4 ); // Okay
BirthDate.getMonth(); // Okay
BirthDate.setMonth( 4 ); // C2662 Error
}
但是month 是如何在setMonth 函数中被修改的呢?该函数按值传递并且不返回任何内容。此外,该函数如何知道月份变量以在不传入的情况下对其进行修改?
【问题讨论】:
-
month因为分配而在setMonth中得到“修改”?它甚至在评论中这样说:“修改数据成员”
标签: c++ oop scope pass-by-value