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;
}

Guess you like

Origin blog.csdn.net/aaasssdddd96/article/details/120355788