C++的封装(四): 访问控制

C++在类型封装中引入public/protected/private访问控制之后,对成员的混乱访问问题得到了纠正,但同时也带来了一个问题,就是作者自己也无法随意访问类中的成员。一个正在开发中的类是需要随时检查内部成员变量的,毕竟一个没有经过仔细调试的东西是不能保证正确的。

这个问题怎么解决呢?第一步,在开始设计一个类型时,可以先用struct。用struct声明的类,所有成员默认都是public属性的,这时可以随时检查内部成员变量的值,也可以随时调用各个成员函数,没有访问障碍。

当类型开发成型后,再改回class声明,然后内部加上public/protected/private访问控制说明。这时候,类的内部功能已经调试过了,只要防止外部用户对类型不规范的使用就好了。

当使用过程中,遇到错误,需要追踪bug时,可以再改回第一步,允许对所有成员访问。当然这样来回改是很不方便的,所以也可以临时添加一个友员类,友员是可以访问类的私有成员的。调试完了再删去就好了。

就像下面这个例子展示的那样。例子中base类和derived类都声明了同一个debug类是友员。这当然是可以的。友员中又声明了一个公有的静态函数print(),允许检查base类和derived类的内部数据。

#include <stdio.h>

class base
{
public:
    base(){x = 0; y = 0;}
    base(int a){x = a; y = 0;}
    base(int a, int b){x = a; y = b;}
private:
    int x;
    int y;
friend class debug;
};
class derived: public base
{
public:
    derived(){z = 0;}
    derived(int a, int b, int c):base(a,b){z = c;}
private:
    int z;
friend class debug;
};

class debug {
public:
        static void print(derived &d) {
                printf("%%(%d,%d,%d)\n", d.x, d.y, d.z);
        }
};
int main()
{
    derived a;
    derived b(1,2,3);

    debug::print(a);
    debug::print(b);
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值