创建如下文件目录 :

Shape.h

#include <stdlib.h>
//接口
#ifndef Interface
#define Interface struct
#endif
//类
#ifndef Class
#define Class struct
#endif
//SHAPE_H_
#ifndef SHAPE_H_
#define SHAPE_H_
//抽象形状类
Class Shape;
typedef Class Shape * p_shape;
//抽象形状类声明
Class Shape
{
int edge;
int (*getEdge)(p_shape shape);
int (*calcArea)(p_shape shape);
}; //形状类构造函数
p_shape Shape(int edge);
//形状类析构函数
void _Shape(void * shape);
//形状类实例方法
int Shape_getEdge(p_shape shape);
//形状类抽象方法,返回-1,表示未实现
int Shape_calcArea(p_shape shape); #endif /* SHAPE_H_ */

Shape.c

#include "Shape.h"

p_shape Shape(int edge)
{
p_shape obj = (p_shape) malloc(sizeof(Class Shape));
obj->edge = edge;
obj->getEdge = Shape_getEdge;
obj->calcArea = Shape_calcArea;
return obj;
} void _Shape(void * obj)
{
if (NULL != obj)
{
free(obj);
}
} int Shape_getEdge(p_shape shape)
{
return shape->edge;
} int Shape_calcArea(p_shape shape)
{
return -;
}

Triangle.h

#include "Shape.h"

#ifndef TRIANGLE_H_
#define TRIANGLE_H_
//三角形类
Class Triangle;
typedef Class Triangle * p_triangle;
//三角形类声明
Class Triangle
{
int bottom;
int height;
p_shape super;
int (*getEdge)(p_triangle triangle);
int (*calcArea)(p_triangle triangle);
}; //三角形类构造函数
p_triangle Triangle(int bottom, int height);
//三角形类析构函数
void _Triangle(void * triangle);
//三角形类实例方法
int Triangle_getEdge(p_triangle triangle);
//三角形类实例方法,重写父类同名方法
int Triangle_calcArea(p_triangle triangle); #endif /* TRIANGLE_H_ */

Triangle.c

#include "Shape.h"
#include "Triangle.h" p_triangle Triangle(int bottom, int height)
{
p_triangle obj = (p_triangle) malloc(sizeof(Class Triangle));
obj->bottom = bottom;
obj->height = height;
obj->super = Shape();
obj->getEdge = Triangle_getEdge;
obj->calcArea = Triangle_calcArea;
return obj;
} void _Triangle(void * triangle)
{
if (NULL != triangle)
{
free(triangle);
}
} int Triangle_getEdge(p_triangle triangle)
{
return triangle->super->edge;
} int Triangle_calcArea(p_triangle triangle)
{
return triangle->bottom * triangle->height / ;
}

Rectangle.h

#include "Shape.h"
#ifndef RECTANGLE_H_
#define RECTANGLE_H_
//矩形类
Class Rectangle;
typedef Class Rectangle * p_rectangle; //矩形类声明
Class Rectangle
{
int bottom;
int height;
p_shape super;
int (*getEdge)(p_rectangle rectangle);
int (*calcArea)(p_rectangle rectangle);
}; //矩形类构造函数
p_rectangle Rectangle(int bottom, int height);
//矩形类析构函数
void _Rectangle(void * rectangle);
//矩形类实例方法
int Rectangle_getEdge(p_rectangle rectangle);
//矩形类实例方法,重写父类同名方法
int Rectangle_calcArea(p_rectangle rectangle); #endif /* RECTANGLE_H_ */

Rectangle.c

#include "Shape.h"
#include "Rectangle.h" p_rectangle Rectangle(int bottom, int height)
{
p_rectangle obj = (p_rectangle) malloc(sizeof(Class Rectangle));
obj->bottom = bottom;
obj->height = height;
obj->super = Shape();
obj->getEdge = Rectangle_getEdge;
obj->calcArea = Rectangle_calcArea;
return obj;
} void _Rectangle(void * rectangle)
{
if (NULL != rectangle)
{
free(rectangle);
}
} int Rectangle_getEdge(p_rectangle rectangle)
{
return rectangle->super->edge;
} int Rectangle_calcArea(p_rectangle rectangle)
{
return rectangle->bottom * rectangle->height;
}

Main.c

#include "Shape.h"
#include "Triangle.h"
#include "Rectangle.h"
#include <stdio.h> int main()
{
p_triangle triangle = Triangle(, );
printf("%d\n", triangle->getEdge(triangle));
printf("%d\n", triangle->calcArea(triangle));
_Triangle(triangle); p_rectangle rectangle = Rectangle(, );
printf("%d\n", rectangle->getEdge(rectangle));
printf("%d\n", rectangle->calcArea(rectangle));
_Rectangle(rectangle); return ;
}

编译运行,结果如下:


纯C实现面向对象之接口编程的更多相关文章

  1. 面向对象、接口编程的重要性 python 为什么引入接口interface

    面向对象编程的实践 有个产品,其有10个子产品,现在要统计每日消费数据其中8个子产品的消费入账金额算法相同,2个不同; 拓展性差的糟糕的代码 def ConsumptionSum(product): ...

  2. 【GoLang】golang 面向对象编程 & 面向接口编程

    005.面向对象&接口编程 1 面向函数编程 1.1 将数据作为参数传递到函数入参 1.2 对象与函数是分离的 2 面向对象编程 2.1 使用者看起来函数作为对象的属性而非参数 2.2 函数属 ...

  3. 针对接口编程能帮助达到面向对象开发和设计中"低耦合"的要求. 某公司...打印机...(笔试中遇到的题目)

    针对接口编程能帮助达到面向对象开发和设计中"低耦合"的要求.         举个例子:某公司有一台特殊打印机,还可以使用一年,一年后可能换为另一种打印机,这两种打印机都特殊而贵. ...

  4. Reactor事件驱动的两种设计实现:面向对象 VS 函数式编程

    Reactor事件驱动的两种设计实现:面向对象 VS 函数式编程 这里的函数式编程的设计以muduo为例进行对比说明: Reactor实现架构对比 面向对象的设计类图如下: 函数式编程以muduo为例 ...

  5. JavaScript学习笔记-面向对象的模块化编程

    面向对象的模块化编程 模块是一个独立的JS文件,模块文件可以包含一个类定义.一组相关的类.一个实用函数库.一些待执行的代码 模块化的目标:支持大规模的程序开发,处理分散源代码的组装,并能让代码正确执行 ...

  6. javascript设计模式学习之十七——程序设计原则与面向接口编程

    一.编程设计原则 1)单一职责原则(SRP): 这里的职责是指“引起变化的原因”:单一职责原则体现为:一个对象(方法)只做一件事. 事实上,未必要在任何时候都一成不变地遵守原则,实际开发中,因为种种原 ...

  7. go 学习笔记之万万没想到宠物店竟然催生出面向接口编程?

    到底是要猫还是要狗 在上篇文章中,我们编撰了一则简短的小故事用于讲解了什么是面向对象的继承特性以及 Go 语言是如何实现这种继承语义的,这一节我们将继续探讨新的场景,希望能顺便讲解面向对象的接口概念. ...

  8. python之面向对象设计、编程

    面向对象 一.编程三个范式 1.面向过程编程 2.函数式编程 数学层面的函数 python中的函数编程 3.面向对象编程 二.面向对象设计 1.类:把一类事物共同的特征和共同的动作整合在一起就是类: ...

  9. Python 中的面向接口编程

    前言 "面向接口编程"写 Java 的朋友耳朵已经可以听出干茧了吧,当然这个思想在 Java 中非常重要,甚至几乎所有的编程语言都需要,毕竟程序具有良好的扩展性.维护性谁都不能拒绝 ...

随机推荐

  1. js事件中绑定另一事件导致事件多次执行

    1.html代码 <input type="button" value="add"> <input type="button&quo ...

  2. Linux内核:关于中断你需要知道的【转】

    转自:http://blog.csdn.net/duqi_2009/article/details/38009717 1.中断处理程序与其他内核函数真正的区别在于,中断处理程序是被内核调用来相应中断的 ...

  3. C#后台调用js方法无效果,未解决。

    this.Page.ClientScript.RegisterStartupScript(this.Page.GetType(), "", "<script> ...

  4. 【bzoj4272】筐子放球

    看题解会的系列…… 详细解释先坑着,以后补…… #include<bits/stdc++.h> #define N 200005 using namespace std; ,tot=,cn ...

  5. import详解

    试想一下 在工作中今年在一个项目中可能会导入某一个目录下的模块文件,那这个时候怎么样才能让Python解释器能够找到该模块进行调用呢? - 将这个模块拷贝一份到当前使用目录下. 这种方式让模块太冗余 ...

  6. 《Java编程思想》笔记 第二十章 注解

    1.注解 注解也称元数据,是在代码中添加信息的一种方式添加的信息提供给编译器或者工具类框架使用. SE5引入,可以提供用来完整描述程序所需要的信息,往往这些信息是无法用Java来表达的. 注解可以在编 ...

  7. KVM(四) I/O 设备直接分配和 SR-IOV

    (4):I/O 设备直接分配和 SR-IOV 本文将分析 PCI/PCIe 设备直接分配(Pass-through)和 SR-IOV, 以及三种 I/O 虚拟化方式的比较. 1. PCI/PCI-E ...

  8. k8s通过configmap管理应用配置信息

    Secret 可以为 Pod 提供密码.Token.私钥等敏感数据:对于一些非敏感数据,比如应用的配置信息,则可以用 ConfigMap. ConfigMap 的创建和使用方式与 Secret 非常类 ...

  9. java的maven项目(三)私服的搭建(windows版)

    1       私服 nexus 安装nexus 启动服务 启动失败的解决方法: 登录nexus 用户名/密码  admin/admin123 仓库类型 Virtual   虚拟仓库 Proxy  代 ...

  10. python-函数(装饰器)

    装饰器 装饰器的主要功能: 在不改变函数调用方式的基础上在函数的前.后添加功能. 装饰器的固定格式: #装饰器的本质 :闭包函数 #功能:就是在不改变原函数调用方式的情况下,在这个函数前后加上扩展功能 ...