zoukankan      html  css  js  c++  java
  • 从C转到JAVA学习路之struct与class对比(转)

    转自:http://blog.csdn.net/andywxf01/article/details/53506549

    JAVA里最牛B的最基本的就是类,而C语言中的struct也可以定义自己的数据结构, 它们有很多相似的也有区别。在我看来它们之间最大的不同是struct里不支持方法,class里支持。

           方法是什么?就是函数,也就是说JAVA中的成员变量与函数归属于一个类的,C语言中有办法做到吗? 我想到的就是函数指针。
           先看如下C代码:
    #include<stdio.h>
    float Getlen(float r)//求周长
    {
        return 3.14*r*r;
    }
    float Getrare(float r)//求面积
    {
        return 2*3.14*r;
    }
    typedef struct s_circle
    {
        float  r;
        float (*getlen)(float);
        float (*getrare)(float);
    }Circle;
    void main()
    {
        Circle  cl;
        cl.getlen = Getlen;//关键点就在这里,将函数与类型关联起来
        cl.getrare = Getrare;
        printf("%f %f",cl.getlen(1), cl.getrare(2));
    }

    我定义了一个Circle类型,里面有3个成员,一个普通变量,2个函数指针。在main()里面我将cl的函数指针与上面两个函数关联起来了,在使用的时候就直接调用,发现没有跟JAVA中的类非常相似了,都可以直接用方法了。

      下面看下JAVA中实现这个功能:
    class Circle
    {
        double  r;
        double getlen(double r)//求周长
        {
            return 3.14*r*r;
        }
        double getrare(double r)//求面积
        {
            return 2*3.14*r;
        }
    }
    
    public class example {
         public static void main(String[] args) {
                   Circle  cl = new Circle();
               System.out.println(cl.getlen(1)+" "+cl.getrare(2));
         }
    }

    大家对比一下,都要定义成员,都要定义2个函数,使用时也是直接调用方法,是不是并没有什么区别嘛。

        如果只写一个类真的没什么区别,但是JAVA是以类为基本构造起来的,所以它将类功能发挥到了极致,加了很多功能。
        下面来看下类的继承与C中struct的关系:
         看下C的两个结构体:学生与工人
    typedef struct s_student
    {
        int age;
        char name[10];
        char sex[4];
        char number[20];//学号
        int  grade;//年级
    }Student;
    typedef struct s_work
    {
        int age;
        char name[10];
        char sex[4];
        char company[20];//公司
        char type[10];  //工种
    }Work;

    大家可以发现age, name, sex重复了,如果再定义老师,农民等类型。发现还是要重复写这3个成员,因为是人都会有这3个成员。所以可以提取出来一个类型,如下

    typedef struct s_human
    {
        int age;
        char name[10];
        char sex[4];
    }Human;
    typedef struct s_student
    {
        Human info;
        char number[20];//学号
        int  grade;//年级
    }Student;
    typedef struct s_work
    {
        Human info;
        char company[20];//公司
        char type[10];  //工种
    }Work;

    这样以后不管定义多少种身份,都可以用Human这个基本信息了。

          细心的同学应该会发现,这尼妹跟JAVA里类的继承很像嘛。不过JAVA做的更完美, struct类型下的成员信息是全部公开可访问的,但现实生活中不是这样的,比如女生的年龄,你的存款等。java类成员可以用public, private, protect修饰。
           public就是公开都可以访问, private就是私有。如果你的存款想让家人或者儿子们知道,那就用protect修饰。这太生活化了,真的很好用很符合现实生活中的对象存在方式。

     总结: 面向对象和面向结构是给开发人员看的,对计算机来的就是执行语句,操作内存,根本不存在什么区别。
     
     
  • 相关阅读:
    分布式事物的解决方法
    bootstrap的其他
    bootstrap表单控件
    多线程编程
    内存管理技术
    PrintWriter用法简析
    JSP内置对象
    Servlet学习应该注意的几点
    GPU渲染管线概述
    再说AutoComplete
  • 原文地址:https://www.cnblogs.com/guazi/p/6495379.html
Copyright © 2011-2022 走看看