C实现-CPP的-封装

#include <stdio.h>
#include <stdlib.h>
/*
	C实现CPP中的 set get 方法的权限控制   
	flag = 0 有权限 public、flag = 1 无权限 private   
*/

static int *p_id = NULL;   // 把数据隐蔽的存起来、不一定非要放在静态区、CPP一般放在堆区。 
static char *p_name = NULL;

// 定义一个学生结构体   
struct Student {
	int id;

	void (*p_setId)(struct Student *p_stu, int flag, int newId );// set 方法         
	int (*p_getId)(struct Student *p_stu, int flag );// get方法

	void (*p_setName)(struct Student *p_stu, int flag, char * newName);// set 方法         
	char * (*p_getName)(struct Student *p_stu, int flag);// get方法

	void (*p_print) (struct Student *p_stu , int flag );

};

//set   
void setId(struct Student *p_stu, int flag, int newId){
	if (0 == flag)// 有权限   
	{
		p_id = (int *)malloc(sizeof(int));// 分配一片儿内存 用于存储数据 newId
		*p_id = newId;
	}
}

// get 
int getId(struct Student *p_stu, int flag){
	if (p_id != NULL)// 有数据
	{
		if (0 == flag)
		{
			return *p_id;// 取出数据并返回   
		}
	}
}

// ----------------- name 
//set   
void setName(struct Student *p_stu, int flag, char * newName){
	if (0 == flag)// 有权限   
	{
		p_name = newName;
	}
}

// get 
char * getName(struct Student *p_stu, int flag){
	if (p_name != NULL)// 有数据
	{
		if (0 == flag)
		{
			return p_name;
		}
	}
}


// 打印     
void print(struct Student *p_stu , int flag){
	if (0 == flag)
	{
		printf("\n id = %d ; name = %s ", p_stu->p_getId(p_stu, flag),p_stu->p_getName(p_stu,flag));
	}
}

void main(){
	struct Student stu;
	stu.p_setId = setId;
	stu.p_getId = getId;
	stu.p_setName = setName;
	stu.p_getName = getName;
	stu.p_print = print;// 初始化 

	stu.p_setId(&stu,0,12);// set 数据
	stu.p_setName(&stu, 0, "nihao");// set 数据

	stu.p_print(&stu, 0);// 访问数据

	//p_print(&stu, 0); 错误、只能通过 stu.p_print(&stu, 0); 访问、这样就实现了数据的封装

	getchar();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值