面向对象C编程--封装

在C语言中,实现面向对象的封装属性可以通过结构体和函数指针来实现。下面是一个示例程序:

#include <stdio.h>
#include <stdlib.h>

// 定义一个结构体类型
typedef struct {
    int property1;
    float property2;
    char property3;
} Object;

// 定义一个函数指针类型,用于访问结构体属性
typedef void (*ObjectPropertyAccessor)(Object *, void *);

// 定义访问结构体属性的函数
void getProperty1(Object *obj, void *value) {
    *(int *)value = obj->property1;
}

void setProperty1(Object *obj, void *value) {
    obj->property1 = *(int *)value;
}

void getProperty2(Object *obj, void *value) {
    *(float *)value = obj->property2;
}

void setProperty2(Object *obj, void *value) {
    obj->property2 = *(float *)value;
}

void getProperty3(Object *obj, void *value) {
    *(char *)value = obj->property3;
}

void setProperty3(Object *obj, void *value) {
    obj->property3 = *(char *)value;
}

// 定义一个函数,用于创建对象
Object *createObject() {
    Object *obj = (Object *)malloc(sizeof(Object));
    obj->property1 = 0;
    obj->property2 = 0.0f;
    obj->property3 = '\0';
    return obj;
}

// 定义一个函数,用于销毁对象
void destroyObject(Object *obj) {
    free(obj);
}

// 定义一个函数,用于访问对象属性
void objectProperty(Object *obj, ObjectPropertyAccessor accessor, void *value, int isSetter) {
    if (isSetter) {
        accessor(obj, value);
    } else {
        accessor(obj, value);
    }
}

int main() {
    // 创建一个对象
    Object *obj = createObject();

    // 设置和访问对象属性
    objectProperty(obj, setProperty1, &(obj->property1), 1);
    objectProperty(obj, getProperty1, &(obj->property1), 0);

    objectProperty(obj, setProperty2, &(obj->property2), 1);
    objectProperty(obj, getProperty2, &(obj->property2), 0);

    objectProperty(obj, setProperty3, &(obj->property3), 1);
    objectProperty(obj, getProperty3, &(obj->property3), 0);

    // 销毁对象
    destroyObject(obj);

    return 0;
}

上面的示例程序定义了一个包含三个属性的结构体类型Object,以及六个访问结构体属性的函数。其中,前三个函数用于访问属性值,后三个函数用于设置属性值。这些函数都是通过函数指针进行传递的。

程序中还定义了两个辅助函数createObject()和destroyObject(),用于创建和销毁对象。最后,在main()函数中,通过调用objectProperty()函数来实现对对象属性的访问和设置。

【最后一个bug】多平台都有更新和发布,大家可以一键三连,关注+星标,不错过精彩内容~
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值