using namespace std;
const int MAX_FRIEND = 100;
class Player{
public:
enum {
boy = 1,
girl = 0
};
Player() : user_id_(0), user_sex_(boy){}
~Player(){}
Player(const Player&);
const Player& operator=(const Player&);
void SetUserId(int user_id);
int GetUserId() const;
void SetGroupId(int group_id) const;
int GetGroupId() const;
void SetUserAge(int user_age) const;
int GetUserAge() const;
void SetUserName(const char* user_name);
void PrintPlayerInfo() const;
private:
int user_id_;
mutable int group_id_;
int user_age_;
string user_name_;
const char user_sex_;
static const int friend_count_ = MAX_FRIEND;
};
Player::Player(const Player& player):user_sex_(boy) {
}
const Player& Player::operator=(const Player& other) {
}
void Player::SetUserId(int user_id) {
user_id_ = user_id;
}
int Player::GetUserId() const {
return user_id_;
}
void Player::SetUserAge(int user_age) const {
const_cast
}
int Player::GetUserAge() const {
return user_age_;
}
void Player::SetGroupId(int group_id) const {
group_id_ = group_id;
}
int Player::GetGroupId() const {
return group_id_;
}
void Player::SetUserName(const char* user_name) {
user_name_ = user_name;
}
void Player::PrintPlayerInfo() const {
cout<<"user id:\t"<
int main() {
const Player player1;
//player1.SetUserId(100001);
player1.GetUserId();
Player player2;
player2.SetUserId(100001);
player2.SetGroupId(100);
player2.SetUserAge(21);
player2.SetUserName("Jack");
player2.PrintPlayerInfo();
return 0;
}
通过例子2.3可以看出const objects只能读取内存的值,不能改写内存的值。对于const member function,member data group_id_ 是按逻辑申明的可改变变量。而在SetUserAge(int user_age)函数里通过强转this指针,来改变member data。
文章里所示程序在gcc version 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.1.00)环境里编译通过,全文完。
参考:
c++ 编程思想卷一
effective c++ 第三版