C语言面向对象编程

作者: sllt
发布时间:2015-07-07 16:46:03

什么是面向对象

为了说明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");  }

 

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

 

标签: C语言 编程
来源:http://www.cnblogs.com/ilisp/archive/2013/04/25/3043448.html

推荐: