我是c,可我也有对象(Ubuntu代码)

本文通过C语言实现了一个矩形类的封装、继承与多态,展示了如何使用struct来模仿面向对象编程,包括创建、初始化、修改大小、显示和释放资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我是c,我有struct就够了,为什么需要对象呢?一人我也可以饮酒醉

Java,Python,JavaScript,Ruby,...我并不羡慕他们

我时常骄傲的对自己说,我有指针,指针是程序员的灵魂,一只猴子如果不知道指针,不知道内存,不懂底层的基本原理,那就只能说是一只猴子

我知道,我处于低层,在系统级编程,操作系统,数据库,编译器,我是没有那些漂浮在应用层的那么光鲜亮丽,可我却依然在Unix里笑的冷艳漂亮!

可我不服气,我虽然不知道class是什么,但好在我有struct,我同样可以实现OOP(封装,继承,多态)



好了,我们看一下程序吧!

 1 /*************************************************************************
  2  > File Name: rectangle.h
  3  > Created Time: 2019年02月18日 星期一 18时30分14秒
  4 ************************************************************************/
  5 
  6 #ifndef _RECTANGLE_H__
  7 #define _RECTANGLE_H__
  8 #include <unistd.h>
  9 
 10 struct Rectangle;
 11 struct Rectangle * Rectangle_Create(int x,int y);
 12 void Rectangle_init(struct Rectangle *self,int x,int y);
 13 void Rectangle_Modifysize(struct Rectangle *self,int dx,int dy);
 14 void Rectangle_Display(struct Rectangle *self);
 15 void Rectangle_Empty(struct Rectangle *self);
 16 
 17 
 18 #endif
~                                                                                                                                           
~       
1 /*************************************************************************
  2  > File Name: rectangle.c
  3  > Created Time: 2019年02月18日 星期一 18时32分14秒
  4 ************************************************************************/
  5 #include <stdio.h>
  6 #include <stdlib.h>
  7 #include <unistd.h>
  8 #include <assert.h>
  9 struct Rectangle
 10 {
 11     int x;
 12     int y;
 13 };
 14 
 15 struct Rectangle * Rectangle_Create(int x,int y)
 16 {
 17     struct Rectangle *p_Rectangle = malloc(sizeof(struct Rectangle));
 18     p_Rectangle -> x = x;
 19     p_Rectangle -> y = y;
 20 
 21     return p_Rectangle;
 22 }
 23 
 24 void Rectangle_init(struct Rectangle *self,int x,int y)
 25 {
 26     assert(NULL != self);
 27     self -> x = x;
 28     self -> y = y;
 29 }
 30 
 31 void Rectangle_Modifysize(struct Rectangle *self,int dx,int dy)
 32 {
 33     assert(NULL != self);
 34     self -> x += dx;
 35     self -> y += dy;
 36 }
 37 
 38 void Rectangle_Display(struct Rectangle *self)
 39 {
 40     assert(NULL != self);
 41     printf("(%d,%d)\n",self -> x,self -> y);
 42 }
 43 
 44 void Rectangle_Empty(struct Rectangle *self)
 45 {
 46     if(NULL != self)
 47     {
 48         free(self);
 49     }
 50 }
 51 
 52 

 1 /*************************************************************************
  2  > File Name: main.c
  3  > Created Time: 2019年02月18日 星期一 18时33分52秒
  4 ************************************************************************/
  5 
  6 #include "rectangle.h"
  7 
  8 int main(void)
  9 {
 10 
 11     struct Rectangle *p_test = Rectangle_Create(0,0);
 12     Rectangle_init(p_test,10,15);
 13     Rectangle_Display(p_test);
 14     Rectangle_Modifysize(p_test,100,100);
 15     Rectangle_Display(p_test);
 16     Rectangle_Empty(p_test);
 17     return 0;
 18 }
 19 
 20 

 Makefile

  1 test:rectangle.o main.c
  2     gcc rectangle.o main.c -o test        #链接
  3 rectangle.o:rectangle.s
  4     gcc -c rectangle.s                    #汇编
  5 rectangle.s:rectangle.i
  6     gcc -S rectangle.i                    #编译
  7 rectangle.i:rectangle.c
  8     gcc -E rectangle.c -o rectangle.i     #预处理
  9     gcc -E rectangle.c
 10 
 11 clean:
 12     rm rectangle.i rectangle.o rectangle.s test -rf
 13     
 14 
~              

运行结果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值