C语言面向对象的封装、继承和多态的思想
来源:互联网 发布:牛牛软件图片 编辑:程序博客网 时间:2024/05/24 07:20
#include <stdio.h>#include <stdlib.h>#define Jicheng#define Fengzhuang#define Duotai/*思想为结构体的嵌套*/#ifdef Jicheng struct jichengfirst { int num;};struct jichengsecond { double tw;};struct jichengthird { //继承jichengfirst和jichengsecond两个结构体 int mine; struct jichengfirst first; struct jichengsecond second;};#endif/*思想为结构体的嵌套*/#ifdef Fengzhuang struct fengzhuangbase { //需要封装的结构体 int base;};struct fengzhuang { //封装 struct fengzhuangbase *base;};int constructor(struct fengzhuang *f) //建立封装了的结构体{ f->base = (fengzhuangbase *)malloc(sizeof(fengzhuangbase)); if (!f->base) return -1; return 0;}int get(struct fengzhuang *f) //获得封装结构体中数据{ return f->base->base;}void set(struct fengzhuang *f,int data) //数据写入封装结构体{ f->base->base = data;}void destructor(struct fengzhuang *f) //删除封装了的结构体{ free(f->base);}#endif/*思想为结构体的内存布局,即结构体内每个域的内存位置是按照定义的顺序从低地址往高地址顺序存放的*/#ifdef Duotai/*获得结构体中的内部对象*/#define offset_of(type,number) \ ((unsigned long) (&((type *)0)->number))#define container_of(ptr,type,number) \ ((type *)((unsigned long)(ptr)-offset_of(type,number)))/*主类型*/struct shape { char *name; struct shape_operations * opt;};struct shape_operations { void (*Draw)(struct shape *);};/*三角形*/struct triangle { int a,b,c; struct shape base;};static void draw_triangle(struct shape *t){ struct triangle* self = container_of(t,struct triangle,base); printf("draw a %s: %d\t%d\t%d\n", t->name, self->a, self->b, self->c);}static struct shape_operations triangle_operations = { draw_triangle,};void triangle_constructor(struct triangle * t,int a,int b,int c){ t->a=(a>0) ? a : 1; t->b=(b>0) ? b : 1; t->c=(c>0) ? c : 1; t->base.name = "triangle"; t->base.opt = &triangle_operations;}/*正方形*/struct square { int e; struct shape base;}; static void draw_square(struct shape* s){ struct square* self = container_of(s, struct square, base); printf("draw a %s: e = %d\n", s->name, self->e);} static struct shape_operations square_operations = { draw_square,}; void square_constructor(struct square* s, int e){ s->e = (e > 0) ? e : 1; s->base.name = "square"; s->base.opt = &square_operations;}/*输出函数*/void DrawShape(struct shape * s){ s->opt->Draw(s);}#endif 测试:int main(){ triangle t; triangle_constructor(&t,2,2,2); DrawShape(&t.base); square s; square_constructor(&s,4); DrawShape(&s.base); return 0;}
- C语言面向对象的封装、继承和多态的思想
- C语言实现面向对象的思想(实现封装、继承和多态)
- C语言面向对象的思想(实现继承和多态)
- 用c语言实现面向对象的封装继承和多态
- C语言也可以“面向对象”—— C语言实现封装、继承和多态
- 面向对象的封装和继承
- C语言面向对象思想的领悟
- C语言实现面向对象的思想
- java面向对象基本思想--封装继承多态
- a.面向对象编程思想(封装继承多态接口)
- C语言实现C++的封装继承和多态
- objective-c自学总结(三)---面向对象的封装,继承与多态
- C++面向对象的抽象 封装继承 多态总结
- 面向对象封装、继承、多态的简述
- 面向对象的特性:封装继承多态
- 面向对象的封装、继承与多态
- java面向对象的封装、继承、多态案例
- Java面向对象封装、继承、多态的总结
- ORACLE连接问题
- 南京长江隧道发生连环追尾事故 没有人员伤亡-南京-隧道-追尾
- 数理逻辑:命题演算(10)命题演算的完备性 (尚缺,待补)
- R的基本使用(1)
- ****** 类中成员变量在内存中的分布是怎样的?---1
- C语言面向对象的封装、继承和多态的思想
- 精明的程序员——堆栈和队列的相互转换
- Linux I2c Driver的整体分析
- iphone CoreDat数据库 NSFetchedResultsControler
- 数理逻辑:命题演算(11)命题演算公理的独立性 (尚缺,待补)
- php file_get_contents()换行符号遭塌白
- win7之telnet如何连接与使用
- 持续化思考之:前期思考(需求+产品定义)有多重要?
- 10月28日NTalks第27期活动: 广告与反广告-移动平台上的生存博弈