【编程技巧】-C隐藏结构体成员
2021/11/1 22:11:43
本文主要是介绍【编程技巧】-C隐藏结构体成员,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录- 前言
- 原理
- 源码(bug 菌)
- 参考
前言
在看到这篇文章时觉得不错,虽然现在还没用上,但是至少知道有个这么一个概念或者一个可行的方法。记录下来。
了解过面向对象编程都应该知道 public
和 private
。那我们也可以在 c 上实现,且在结构体上实现成员的公私有。
李柱明博客:https://www.cnblogs.com/lizhuming/p/15486838.html
原理
原理:
- 一个结构体 A (放在源文件)内包含两个子结构体成员,一个为
public
类型一个为private
。 - 一个结构体 B(放在头文件)内只包含公开使用的子结构体
public
。 - 结构体 A 和结构体 B 命名是一样的。
public
类型结构体放在头文件,公开使用。private
类型放在源文件,私有使用。
源码(bug 菌)
- app.h
/************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
- app.c
/************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); }
- 测试 demo
/**************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; }
参考
- bug 菌
这篇关于【编程技巧】-C隐藏结构体成员的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-05Easysearch 可搜索快照功能,看这篇就够了
- 2025-01-04BOT+EPC模式在基础设施项目中的应用与优势
- 2025-01-03用LangChain构建会检索和搜索的智能聊天机器人指南
- 2025-01-03图像文字理解,OCR、大模型还是多模态模型?PalliGema2在QLoRA技术上的微调与应用
- 2025-01-03混合搜索:用LanceDB实现语义和关键词结合的搜索技术(应用于实际项目)
- 2025-01-03停止思考数据管道,开始构建数据平台:介绍Analytics Engineering Framework
- 2025-01-03如果 Azure-Samples/aks-store-demo 使用了 Score 会怎样?
- 2025-01-03Apache Flink概述:实时数据处理的利器
- 2025-01-01使用 SVN合并操作时,怎么解决冲突的情况?-icode9专业技术文章分享
- 2025-01-01告别Anaconda?试试这些替代品吧