10.2 存取器方法(Accessor Method)

Posted: March 26, 2011 in C++

/*
有没有什么方法可以 设置数据成员为私有,然后在其他函数中 修改呢?
答案是:有的,那就是创建 存取器方法 或 存储器函数.即AccessorMethod.

为什么不直接在公有成员变量,即public中设置使用,
而是要多设置一个私有成员变量,即private成员变量,
然后通过改变公有成员变量来改变其在私有成员变量中的值呢?

答案是:
存取器函数能够将 存储细节 与 数据使用细节 分开.
通过使用存取器函数,以后修改数据的存储方式时,不必重新编写使用这些数据的函数.
这种技术使得程序更容易维护,它延长了代码的生命周期,因为设计的变化不会导致程序作废.
同时存取器函数也包含一些其他的逻辑方法.
*/

#include <iostream>

using namespace std;

class Cat
{
public:
            int GetAge();//声明公有存取器函数
            void SetAge(int Age);//声明公有存取器函数
 
            int GetWeight();//声明公有存取器函数
            void SetWeight(int Weight);//声明公有存取器函数

            void Eat();

private:
            int ItsAge;
            int ItsWeight;
};

void Cat::SetAge(int Age)
{
            ItsAge=Age;//将Age赋值个私有成员变量ItsAge
}

int Cat::GetAge()//调取私有成员变量ItsAge的值
{
            return ItsAge;//返回ItsAge的值
}

void Cat::SetWeight(int Weight)//同理
{
            ItsWeight=Weight;
}

int Cat::GetWeight()
{
            return ItsWeight;
}

void Cat::Eat()
{
            cout<<“I can eat.”<<endl;
}

void main()
{
            Cat Frisky;
            Frisky.SetAge(2);
            /*main无法直接访问ItsAge但是可以访问公有成员函数,
            当然也就可以访问SetAge()和GetAge(),
            而在class Cat里又包含SetAge()和GetAge(),
            所以也就可以访问私有成员变量ItsAge.
            从而为私有ItsAge赋值.*/
 
            Frisky.SetWeight(100);//同理
            Frisky.Eat();
            cout<<“I am “<<Frisky.GetAge()<<” years old.”<<endl;
            cout<<“And I am “<<Frisky.GetWeight()<<” g.”<<endl;
}
//这里达到了通过访问公有存取器函数来给私有成员变量赋值的作用.
//更好地保护了私有数据不被随意修改.

Reference Previous Post: (English)

http://wp.me/p14oGQ-5W

http://wp.me/p14oGQ-5Y

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s