c语言面向对象编程

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

/*
 *
 *   1.  简单实现模拟虚函数表实现c语言面向对象的设计
 *   2.  为实现:  函数注册调用
 *   3.            通过文件实现函数注册调用
 */

//封装
typedef struct _Shape Shape;

//模拟虚函数表
struct ShapeClass
{
    void (*construct)(Shape* self); //构造函数
    void (*destroy)(Shape* self);   //析构函数
    void (*draw)(Shape* self);      //处理函数  
};

struct _Shape
{
   struct ShapeClass *kclass;
   int x,y;
};

//构造函数
void Shape_construct(Shape* self)
{q
    
     self->x = 0;
     self->y = 0;
     printf("Shape construct\n");
}

//析构函数
void Shape_destroy(Shape* self)
{
    printf("shape destroy\n");
    //to-do destroy self
}
void Shape_draw(Shape* self)
{
    printf("draw:%d,%d\n",self->x,self->y);
    //to-do draw self
}

//声明_shape_class, 即注册虚函数表
struct ShapeClass _shape_class=
{
    Shape_construct,  //函数名就是函数的地址
    Shape_destroy,
    Shape_draw,
};

Shape* newShape()
{
    Shape* s = (Shape*)malloc(sizeof(Shape));
    s->kclass = &_shape_class;
    s->kclass->construct(s);
    return s;
}
void deleteShape(Shape* shape)
{
   shape->kclass->destroy(shape);
   free(shape);
}

int main()
{
    Shape* shape = newShape();
    shape->kclass->draw(shape);
    deleteShape(shape);
}
时间: 2024-10-06 16:52:57

c语言面向对象编程的相关文章

R语言面向对象编程:S3和R6

一.基于S3的面向对象编程 基于S3的面向对象编程是一种基于泛型函数(generic function)的实现方式. 1.S3函数的创建 S3对象组成:generic(generic FUN)+method(generic.class FUN) 泛型函数(generic)创建示例: get_n_elements <- function(x,...) { UseMethod("get_n_elements") } 通常用UseMethod()函数定义一个泛型函数的名称,通过传入参数

C语言面向对象编程(五):单链表实现(转)

这里实现的单链表,可以存储任意数据类型,支持增.删.改.查找.插入等基本操作.(本文提供的是完整代码,可能有些长.) 下面是头文件: 1 #ifndef SLIST_H 2 #define SLIST_H 3 4 #ifdef __cplusplus 5 extern "C" { 6 #endif 7 8 #define NODE_T(ptr, type) ((type*)ptr) 9 10 struct slist_node { 11 struct slist_node * next

go语言面向编程

面向对象编程篇 go语言面向对象编程,并不像传统面向对象编程中有继承.封装.多态.函数重载等概念: go语言面向对象编程非常的 简单优雅,,结构(struct).方法(method).接口(interface)浑然一体,共同支持着 面向对象编程 一.结构体 struct go语言支持基本类型组合功能-struct结构类型,struct结构类型看似简单,实则能实现很强大的复杂功能1. 定义 type <name> struct {} type Rect struct { x, y float64

go语言学习(五)——面向对象编程

主要讲的是"类"和接口&和其他传统语言不一样的地方挺多的,断断续续看了好几天 下面是我的练习代码 // GoStudy0219 project main.go /* go语言学习--面向对象编程(1) go中类型的值语义和引用语义 结构体(类)的定义和初始化 */ package main import ( "fmt" ) func main() { //几种"类"的初始化 v1 := &character{"Tom&q

Objective-C语言介绍 、 Objc与C语言 、 面向对象编程 、 类和对象 、 属性和方法 、 属性和实例变量

Objective-C语言介绍 . Objc与C语言 . 面向对象编程 . 类和对象 . 属性和方法 . 属性和实例变量 1 第一个OC控制台程序 1.1 问题 Xcode是苹果公司向开发人员提供的集成开发环境(非开源),用于开发Mac OS X,iOS的应用程序.其运行于苹果公司的Mac操作系统下. 本案例要求使用集成开发工具Xcode编写OC的HelloWorld程序,在Xcode的控制台中, 1.2 方案 首先,启动集成开发工具Xcode. 然后,创建OC语言的工程. 最后,运行所创建的工

GO语言的进阶之路-面向对象编程

GO语言的进阶之路-面向对象编程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 当你看完这篇文章之时,我可以说你的Golang算是入门了,何为入门?就是你去看Docker 源码能看懂60%的语法结构,因为涉及一些unix的代码可能没有Linux运维基础的同学在学习的时候会很吃力,看起来也会带来一定的难度,如果有时间的话我会给大家解析Docker部门精辟的源码.好了,回归正题吧,我们今天要学习的内容是什么呢?即面向对象编程.当然,不要用屌丝的心态来说:"那要是没对象的还咋编程呢

Lua语言基础汇总(12)-- Lua中的面向对象编程

简单说说Lua中的面向对象 Lua中的table就是一种对象,看以下一段简单的代码: 1 2 3 4 5 6 7 8 9 10 11 12 local tb1 = {a = 1, b = 2} local tb2 = {a = 1, b = 2} local tb3 = tb1   if tb1 == tb2 then      print("tb1 == tb2") else      print("tb1 ~= tb2") end   tb3.a = 3 pri

R语言基于S4的面向对象编程

前言 本文接上一篇文章 R语言基于S3的面向对象编程,本文继续介绍R语言基于S4的面向对象编程. S4对象系统具有明显的结构化特征,更适合面向对象的程序设计.Bioconductor社区,以S4对象系统做为基础架构,只接受符合S4定义的R包. 目录 S4对象介绍 创建S4对象 访问对象的属性 S4的泛型函数 查看S4对象的函数 S4对象的使用 1 S4对象介绍 S4对象系统是一种标准的R语言面向对象实现方式,S4对象有明确的类定义,参数定义,参数检查,继承关系,实例化等的面向对象系统的特征. 2

Python源码 -- C语言实现面向对象编程(基类&amp;派生类&amp;多态)

由于公司的ERP系统数据量大,有40G+的数据,并发用户90+,连接数1000+,原来的IO性能跟不上用户的操作响应需求,报表查询慢,该做的索引都做过了,索引每周重建一次,还是解决不了问题,为此,公司新购了dell poweredge R720xd服务器,该套服务器支持2个阵列,24个硬盘,双CPU,64G内存,比较牛X的了,我们创建两个raid,两块SAS硬盘做Raid1,6块SSD硬盘做Raid10,系统装好了,高兴呀,但结过测试发现,总有一个raid速度相当慢,和台式机速度一样,我地妈呀,