类成员变量私有化

   类成员变量私有化,通过读写函数进行访问,这样一方面提供了一致的方式(函数)进行类成员变量访问,另一方面为以后的变化提供便宜。看下面的代码:
   
 1class a
 2{
 3public:
 4    a(int x):x(x)
 5    {
 6
 7    }

 8    ~a()
 9    {
10
11    }

12public:
13    int x;
14}
;
15
16void f1(const a& a1)
17{
18    cout << a1.x << endl;
19}

20void f2(const a& a1)
21{
22    cout << a1.x*a1.x << endl;
23}
   函数f1, f2依赖于class a 的成员变量x, 也就是直接读取了类型a的变量x的值。假设有一天,变量x读取是通过计算后获得,也就是说x的读取语意发生变化(比如现在的读取语意是x*x),这个时候所有依赖于类型a的成员x的代码都要发生变化。。。
   再比如,程序要求对所有使用类型a的变量x的地方都进行日志记录工作,同样我们需要在所有使用变量x的地方进行记录工作。
   这将是我们不愿意看到的,为什么这些工作不能在不改变客户代码的情况下透明化的进行?答案是可以的,下面给出修改后的实现代码: 
 1class a
 2{
 3public:
 4    a(int x):x(x)
 5    {
 6
 7    }

 8    ~a()
 9    {
10
11    }

12public:
13    int GetX() const
14    {
15        //log
16        return x*x;
17    }

18private:
19    int x;
20}
;
21
22void f1(const a& a1)
23{
24    cout << a1.GetX() << endl;
25}

26void f2(const a& a1)
27{
28    cout << a1.GetX()*a1.GetX() << endl;
29}


   总结:类中成员变量应该保持私有化,通过读写器进行访问,这样的封装代码具有较好的扩展性。

posted on 2006-11-26 23:02  小峰  阅读(402)  评论(0)    收藏  举报

导航