zoukankan      html  css  js  c++  java
  • 纯C实现面向对象

    #include <stdio.h>
    #include <stdlib.h>
    
    //接口
    #ifndef Interface
    #define Interface struct
    #endif
    
    //
    #ifndef Class
    #define Class struct
    #endif
    
    //抽象形状类
    Class Shape;
    typedef Class Shape shape;
    //抽象形状类的方法声明
    shape* Shape(int edges);
    int shape_getEdges(shape *);
    int shape_getArea(void);
    void _Shape(shape *);
    
    //三角形类
    Class Triangle;
    typedef Class Triangle triangle;
    //三角形类的方法声明
    triangle * Triangle(int bottom, int height);
    int triangle_getEdges(triangle *);
    int triangle_getArea(triangle *);
    void _Triangle(triangle *);
    
    //矩形类
    Class Rectangle;
    typedef Class Rectangle rectangle;
    //矩形类的方法声明
    rectangle * Rectangle(int bottom, int height);
    int rectangle_getEdges(rectangle *);
    int rectangle_getArea(rectangle *);
    void _Rectangle(rectangle *);
    
    //抽象形状类实现
    Class Shape
    {
        int edges;
        int (*getEdges)(shape*);
        int (*getArea)(void);
    };
    
    //形状类构造函数
    shape* Shape(int edges)
    {
        shape * obj = (shape *) malloc(sizeof(shape));
        obj->edges = edges;
        obj->getEdges = shape_getEdges;
        obj->getArea = shape_getArea;
        return obj;
    }
    
    int shape_getEdges(shape* obj)
    {
        return obj->edges;
    }
    
    int shape_getArea(void)
    {
        return -1;
    }
    
    //形状类析构函数
    void _Shape(shape * obj)
    {
        if(obj == NULL)
            return; 
        free(obj); 
    }
    
    //三角形类实现
    Class Triangle
    {
        shape * super;
        int bottom;
        int height;
        int (*getEdges)(triangle *);
        int (*getArea)(triangle *);
    };
    
    //三角形类构造函数
    triangle * Triangle(int bottom, int height)
    {
        triangle* obj = (triangle*) malloc(sizeof(triangle));
        //调用Shape构造函数用于实现继承
        obj->super = Shape(3);
        obj->bottom = bottom;
        obj->height = height;
        obj->getEdges = triangle_getEdges;
        obj->getArea = triangle_getArea;
        return obj;
    }
    
    int triangle_getEdges(triangle * obj)
    {
        return obj->super->edges;
    }
    
    int triangle_getArea(triangle * obj)
    {
        return (obj->bottom * obj->height) / 2;
    }
    
    //三角形类析构函数
    void _Triangle(triangle * triangle)
    {
        _Shape(triangle->super); 
    
        if(triangle == NULL)
        {
            return; 
        }
    
        free(triangle); 
    }
    
    //矩形类实现
    Class Rectangle
    {
        shape * super;
        int bottom;
        int height;
        int (*getEdges)(rectangle *);
        int (*getArea)(rectangle *);
    };
    
    //矩形类构造函数
    rectangle * Rectangle(int bottom, int height)
    {
        rectangle * obj = (rectangle *)malloc(sizeof(rectangle));
        //调用Shape构造函数用于实现继承
        obj->super = Shape(4);
        obj->bottom = bottom;
        obj->height = height;
        obj->getEdges = rectangle_getEdges;
        obj->getArea = rectangle_getArea;
        return obj;
    }
    
    int rectangle_getEdges(rectangle * obj)
    {
        return obj->super->edges;
    }
    
    int rectangle_getArea(rectangle * obj)
    {
        return (obj->bottom * obj->height);
    }
    
    //矩形类析构函数
    void _Rectangle(rectangle * obj)
    {
        _Shape(obj->super);
        if(obj == NULL)
        {
            return;
        }
        free(obj);
    }
    
    //测试
    void main(){
        shape* shapeObj = Shape(0);
         printf("%d
    ", shapeObj->getEdges(shapeObj));
        printf("%d
    ", shapeObj->getArea());
        _Shape(shapeObj);
    
        triangle* triangleObj = Triangle(4, 5);
        printf("%d
    ", triangleObj->getEdges(triangleObj));
        printf("%d
    ", triangleObj->getArea(triangleObj));
        _Triangle(triangleObj);
    
        rectangle* rectangleObj = Rectangle(4, 5);
        printf("%d
    ", rectangleObj->getEdges(rectangleObj));
        printf("%d
    ", rectangleObj->getArea(rectangleObj));
        _Rectangle(rectangleObj);
    }
  • 相关阅读:
    SharePoint 2013 中的SQL Server 安全
    SharePoint 2013 的HTML5特性之响应式布局
    SharePoint 2013 一些小技巧
    SharePoint 2013 排错之"Code blocks are not allowed in this file"
    SharePoint 2013 创建搜索中心及搜索设置
    SharePoint 2013 使用PowerShell创建State Service
    SharePoint 2013 内容部署功能简介
    SharePoint 使用PowerShell恢复误删的网站集
    SharePoint 自定义WebPart之间的连接
    linux之misc及使用misc创建字符设备
  • 原文地址:https://www.cnblogs.com/zfc2201/p/3500200.html
Copyright © 2011-2022 走看看