#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();
}
C实现-CPP的-封装
最新推荐文章于 2024-06-02 21:49:40 发布