编程语言
首页 > 编程语言> > 【编程技巧】-C隐藏结构体成员

【编程技巧】-C隐藏结构体成员

作者:互联网

目录


前言

在看到这篇文章时觉得不错,虽然现在还没用上,但是至少知道有个这么一个概念或者一个可行的方法。记录下来。

了解过面向对象编程都应该知道 publicprivate 。那我们也可以在 c 上实现,且在结构体上实现成员的公私有。

李柱明博客:https://www.cnblogs.com/lizhuming/p/15486838.html

原理

原理:

源码(bug 菌)

/************filename: App.h*************/ 
#ifndef __APP_H__
#define __APP_H__

typedef struct _tag_Stpublic stpublicObj;
struct _tag_Stpublic
{
    int member1;
    int member2;
};

typedef struct _tag_StObj stObj;
struct _tag_StObj
{
    stpublicObj public;
};

//interface
extern stObj * sCreate(int member1,int member2);
extern int sAddprivate(stObj *pObj); 
extern int sAddpublic(stObj *pObj);

#endif
/************filename: App.c*************/ 
//#include "App.h"

typedef struct _tag_Stpublic stpublicObj;
struct _tag_Stpublic
{
    int member1;
    int member2;
};

typedef struct _tag_Stprivate stprivateObj;
struct _tag_Stprivate
{
    int member1;
    int member2;
};

typedef struct _tag_StObj stObj;
struct _tag_StObj
{
    stpublicObj public;
    stprivateObj private;
};

/********************************** 
 * Function :  sCreate
 * Note :创建对象
 * Author: bug菌
 **********************************/ 
stObj * sCreate(int member1,int member2)
{
    static  stObj staticObj;

    staticObj.private.member1 = member1;
    staticObj.private.member2 = member2;

    return &staticObj;
}

/********************************** 
 * Function :  sAdd
 * Note :对象方法
 * Author: bug菌
 **********************************/ 
int sAddprivate(stObj *pObj)
{
    return (pObj->private.member1 + pObj->private.member2);
}

/********************************** 
 * Function :  sAdd
 * Note :对象方法
 * Author: bug菌
 **********************************/ 
int sAddpublic(stObj *pObj)
{
    return (pObj->public.member1 + pObj->public.member2);
}
/**************main.c file****************/
#include <stdio.h>
#include "App.h"

int main(void)
{
    stObj *Obj;

    Obj = sCreate(3,5); //内部构造结构体 
    Obj->public.member1 = 10;

    Obj->public.member1 = 6;
    Obj->public.member2 = 10;

    printf("member1 = %d\n",Obj->public.member1);  //调用OK,member1被公开
    printf("member2 = %d\n",Obj->public.member2);  //调用OK,member1被公开

//    printf("member1 = %d\n",Obj->private.member1); //调用失败,因为member1被隐藏
//    printf("member2 = %d\n",Obj->private.member2);  //调用失败,因为member2被隐藏

    printf("private result = %d\n",sAddprivate(Obj));  //调用相应的接口 
    printf("public result = %d\n",sAddpublic(Obj));  //调用相应的接口 

    return 0;
} 

参考

标签:Obj,技巧,int,编程,private,public,member1,member2,隐藏
来源: https://www.cnblogs.com/lizhuming/p/15486838.html