从C转到JAVA学习路之struct与class对比(转)
转自:http://blog.csdn.net/andywxf01/article/details/53506549
JAVA里最牛B的最基本的就是类,而C语言中的struct也可以定义自己的数据结构, 它们有很多相似的也有区别。在我看来它们之间最大的不同是struct里不支持方法,class里支持。
#include<stdio.h>
float Getlen(float r)//求周长
{
return 3.14*r*r;
}
float Getrare(float r)//求面积
{
return *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(), cl.getrare());
}
我定义了一个Circle类型,里面有3个成员,一个普通变量,2个函数指针。在main()里面我将cl的函数指针与上面两个函数关联起来了,在使用的时候就直接调用,发现没有跟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个函数,使用时也是直接调用方法,是不是并没有什么区别嘛。
typedef struct s_student
{
int age;
char name[];
char sex[];
char number[];//学号
int grade;//年级
}Student;
typedef struct s_work
{
int age;
char name[];
char sex[];
char company[];//公司
char type[]; //工种
}Work;
大家可以发现age, name, sex重复了,如果再定义老师,农民等类型。发现还是要重复写这3个成员,因为是人都会有这3个成员。所以可以提取出来一个类型,如下
typedef struct s_human
{
int age;
char name[];
char sex[];
}Human;
typedef struct s_student
{
Human info;
char number[];//学号
int grade;//年级
}Student;
typedef struct s_work
{
Human info;
char company[];//公司
char type[]; //工种
}Work;
这样以后不管定义多少种身份,都可以用Human这个基本信息了。
从C转到JAVA学习路之struct与class对比(转)的更多相关文章
- 从C转到JAVA学习路之基本知识对比(转)
转自:http://blog.csdn.net/andywxf01/article/details/53502615 我一直在用C开发,想转到Java时最容易想到的事就是把C里写的代码和功能用JAVA ...
- (转)如何学习Java技术?谈Java学习之路
51CTO编者注:这篇文章已经是有数年“网龄”的老文,不过在今天看来仍然经典.如何学习Java?本篇文章可以说也是面对编程初学者的一篇指导文章,其中对于如何学习Java的步骤的介绍,很多也适用于开发领 ...
- Java学习之路:不走弯路,就是捷径
1.如何学习程序设计? JAVA是一种平台,也是一种程序设计语言,如何学好程序设计不仅仅适用于JAVA,对C++等其他程序设计语言也一样管用.有编程高手认为,JAVA也好C也好没什么分别,拿来就用.为 ...
- 新篇章之我的java学习之路下
昨天写下了人生的第一篇博客,今天接着写我的java学习之路有关开发及框架的学习过程. 想要学好java语言,只学习一些java的基本语法对实际开发中的用处还是不大的,所以我们还要掌握一些有关javaW ...
- #Java学习之路——基础阶段二(第一篇)
我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容. 前言: ...
- 【分享】Java学习之路:不走弯路,就是捷径
1.如何学习程序设计? JAVA是一种平台,也是一种程序设计语言,如何学好程序设计不仅仅适用于JAVA,对C++等其他程序设计语言也一样管用.有编程高手认为,JAVA也好C也好没什么分别,拿来就用.为 ...
- java学习之路之javaSE基础2
java学习之路之javaSE基础2 所有的代码都是引用他人写的. 1.逻辑运算符 //&,|,^,! //int x = 10; //5 < x < 15 //x > 5 ...
- java学习之路之javaSE基础1
<h2>java学习之路之javaSE基础1</h2> <div> ###01.01_计算机基础知识(计算机概述)(了解)* A:什么是计算机?计算机在生活中的应用 ...
- Java学习之路(转)
Java学习之路(书籍推荐) 一.基础类 1.<Thinking in java>(阅读2遍),入门第一位是建立正确的概念 2.<Core Java>这本书更贴近实践,更多 ...
随机推荐
- Linux makefile 教程 非常详细,且易懂【转】
转自: http://blog.csdn.net/liang13664759/article/details/1771246 最近在学习Linux下的C编程,买了一本叫<Linux环境下的C ...
- Vmware中安装和卸载Linux 16.04.3
1.先去这个链接 https://www.ubuntu.com/download ,下载ubuntu镜像,也就是下图的download选项 2.下载后到虚拟机里创建一个新的虚拟机,然后按照博客 htt ...
- StringUtils.isEmpty()和StringUtils.isBlank() 区别
isBlank()判断空的情况包括了isEmpty()的情况,isBlank()不仅判断了 无对象.空对象的情况,而且也判断了无意义的空白字符,比如空格等.
- python中进程池的应用
#原创,转载请联系 假设我们写的一个程序需要运行100个子进程的时候,那么写程序时,不可能循环创建销毁100个进程吧?进程的创建与销毁是很耗系统的资源的. 进程池的作用就体现出来了. 进程池可以控制进 ...
- hdu 3304(直线与线段相交)
Segments Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12042 Accepted: 3808 Descrip ...
- 在windows下搭建爬虫框架,安装pywin32时出错?
出错原因:pip install pypiwin32(安装文件是pypiwin32而不是pywin32) pip intall pywin32
- 举例说明如何使用【聚合数据】的API接口
0 注册[聚合数据]的账号 登陆www.juhe.cn,如图,如果没有账号,注册一个(手机号或者邮箱注册),如果有直接登陆即可. 1 搜索所需的API接口 找到聚合数据主页,在搜索框输入你想搜索的AP ...
- eclipse断点调试基础
进入debug模式: 1.设置断点 2.启动servers端的debug模式 3.运行程序,在后台遇到断点时,进入debug调试状态 ============================= 作用域 ...
- ChannelFactory
通过前几篇的学习,我们简单了解了WCF的服务端-客户端模型,可以建立一个简单的WCF通信程序,并且可以把我们的服务寄宿在IIS中了.我们不禁感叹WCF模型的简单,寥寥数行代码和配置,就可以把通信建立起 ...
- (1)Maven安装及配置
一.下载 http://maven.apache.org/download.cgi 解压 二.配置环境变量 1 2.path mvn -version 三.本地仓库 本地仓库用来存放远程下载的包,默 ...