• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C语言面向对象编程

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

什么是面向对象

为了说明C语言也可以面向对象编程,有必要说一下面向对象中的几个概念:

  • 一切事物皆对象
  • 对象具有封装和继承特性
  • 对象与对象之间使用消息通信,各自存在信息隐藏

 

可以看出,面向对象只是一种思想,与具体语言无关,只要实现了这几条就是所谓的面向对象了。

看具体代码:

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

typedef struct _CClass
{
    //添加属性
    struct _CClass *self;    //类本身,相当于C++中的this
    int a;
    int b;
    //添加方法
    void (*print)(void *self);

} CParent;


#define EXTERND_CLASS_FROM_CParent \
        void (*print)(void *self);    \
        int a;                    \
        int b;                    \
        


typedef struct _CChild
{
    //继承CParent
    EXTERND_CLASS_FROM_CParent
    //添加属性
    CParent parent;
    int c;
    int d;
    //添加方法

    void (*sayHello)();

} CChild;

void print(void *self);
void sayHello();
int main(int argc, char const *argv[])
{
    CParent *parent=(CParent *)malloc(sizeof(CParent));

    //为属性赋值
    parent->a=1;
    parent->b=2;
    parent->print=print;
    //调用方法
    parent->print((void *)parent);

    free((void *)parent);

    //继承
    CChild *child=(CChild *)malloc(sizeof(CChild));
    child->a=3;
    child->b=5;
    child->print=print;
    child->sayHello=sayHello;
    child->print((void *)child);
    child->sayHello();
    free((void *)child);
    //多态
    
    CChild *child1=(CChild *)malloc(sizeof(CChild));
    CParent *parent1=(CParent *)child1;

    parent1->a=5;
    parent1->b=6;
    parent1->print=print;
    parent1->print((void *)child1);

    free((void *)child1);

    return 0;
}


void print(void *self)
{
    CParent *tmp=(CParent *)self;
    printf("a=%d,b=%d\n",tmp->a,tmp->b);
}


void sayHello()
{
    printf("Hello World! \n");
}

 

面向对象从来都是思想,而不是语言!

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#之选择排序发布时间:2022-07-13
下一篇:
【C++11|02】C++虚函数表剖析②发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap