`
qsxinyu
  • 浏览: 7551 次
  • 性别: Icon_minigender_1
  • 来自: 河南
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

C++&JAVA异同

阅读更多

2、内存动态分配
C++中使用new和delete进行内存的动态分配和回收,new是在堆内存上开辟空间,内存使用完毕之后,必须手动使用delete来回收。

Java中只要是声明了引用数据类型,在使用之前,必须使用new进行内存空间的开辟。但是在对象消亡之后,不用手工的进行内存回收。Java自有的内存回收机制会自动回收垃圾对象(所谓垃圾对象,是指之前开辟的对象内存,不再被栈内存所引用了)。当然也可以通过System.gc()方法进行手工的回收。
3、析构函数
C++析构函数(无参,无返回值)的作用是释放构造函数中动态分配的内存空间,即调用(此调用可以通过对象.析构函数调用,也可以等对象生存期结束时系统自动调用)析构函数。

Java中没有析构函数,通过垃圾回收机制,自动回收垃圾对象。不过可以通过覆写Object类中的fanalize()方法,实现与C++中析构函数一样的效果,当手动或自动销毁对象时,会自动调用fanalize()方法。
4、空类中的内容
C++的空类一定还有4个函数:默认构造函数,默认析构函数,默认拷贝构造函数,

Java的空类中有:默认构造函数,从Object类继承来的方法,如
类中默认属性
C++类中的成员访问权限三种:public>protected>private。不声明的话,默认为private权限。

Java类中的成员访问权限四种:public>protected>defalt>private。默认是default权限。
5、类中成员函数的实现
C++中是习惯在.h头文件的类中声明函数;在类外的.cpp文件中实现函数,要#include头文件。
如:
//demo.h
Class Person{
Public:
Void fun() ; //类中声明
}

//demo.cpp
#include “demo.h”
Void Person ::fun(){ //类外实现
。。。。//实现体
}

Java是类中声明+实现方法。如果不在类中实现,再加上abstract关键字就是抽象方法了。
如:
class Person{
Public void fun(){//类中声明+实现
。。。。//实现体
}
}
6、对象的实例化
class Person{
private :
int age ;
public :
Person(){}
Person(int a){
age = a ;
}
void fun(){….}
}
。。。。 //主函数开始
Person p1 ; //调用的是无参的构造函数
Person p2(18) ; //调用带参构造函数
p1.fun() ; //调用成员函数
p2.fun() ;

java中实例化对象,必须使用new关键字。
class Person{
private String name ;
private int age ;
public Person(){}
public Person(String name, int age){
this.name = name ;
this.age = age ;
}
public void fun() {…..}
}
。。。。。//主函数开始
Person p1 = null ;
p1 = new Person() ; //必须使用new关键字开辟内存空间,调用无参构造。
Person p2 = new Person(“张三”, 18) ;  //调用带参构造。
p1.fun() ; //调用方法
p2.fun() ;
7、This关键字
C++中叫this指针,实例化一个对象时,会默认产生一个this指针指向这个对象,作用是编译器用来区别同一类的不同对象。即当对象.成员函数时,通过this指针知道是哪个对象,调用成员函数来操作该对象的成员属性。

Java中this有3个用途:
1、表示本类中的属性或方法。如this.方法,this.属性。
2、表示当前对象。
3、调用本类的构造方法。如this(),this(参数1,参数2.。。。)。
【其中用途1、2的作用类似C++中的this指针。】
8、对象成员的调用
C++通过对象.成员函数,或是类指针->成员函数来调用。

Java中只能通过对象.成员函数调用。

二者中Static属性的成员,可以直接通过类名.成员函数直接调用。
9、子类-->父类,构造函数的传参
共同点:子类中的构造函数如果不明确指出调用父类的哪个构造函数时,系统默认去调用父类的无参构造函数。同时,如果父类中自己定义了带参的构造函数,最好再定义一个无参的构造函数。

class Person{
private :
int age ;
public :
Person(){}
Person(int a){
age = a ;
}
}
class Student :public Person{
private :
int score ;
public :
Student(int a, int s) :Person(a){ //向父类构造函数传递
score = s ;
}
}

class Person{
private String name ;
private int age ;
public Person(){}
public Person(String name, int age){
this.name = name ;
this.age = age ;
}
}
class Student extends Person{
private int score ;
public Student(String name, int age, int score){
super(name,age) ; //向父类构造函数传递
this.score = score ;
}
}
10、多态性
C++中的多态性必须靠【虚函数或纯虚函数+子类对虚函数或纯虚函数的覆盖】实现。
虚函数用virtual声明,
如:
virtual void fun() ;//类内声明
void 类名 :fun() {….}//类外实现

Java通过子类对普通父类中普通方法的覆写、子类对抽象类中普通方法或抽象方法的覆写、子类对接口中抽象方法的覆写。+向上转型。
抽象方法用abstract声明,且没有内容实现。
如:
abstract void fun() ; //类内无实现
11、抽象类
二者的抽象类都不能实例化对象。纯虚函数和抽象方法概念类似,作用类似。

C++中也可以说有抽象类,带有纯虚函数的类。
纯虚函数是没有内容实现,且带有“=0”的虚函数,不能实例化对象。
如:
virtual void fun() = 0 ; //类内声明为=0,类外也不实现。

Java中的抽象类是用abstract关键字声明的类,其中包含了抽象方法。不能实例化对象。
Java中的接口是一种特殊的类,或者说一种特殊的抽象类。是由全部的静态常量和抽象函数构成。
12、访问权限
C++通过3种继承方式来改变子类与父类间成员的访问权限。
class Student :public Person{
public :
。。。。。。
Private :
。。。。。。
};
class worker :protected Person{
public :
。。。。。。
Private :
。。。。。。
};
Class farmer :private Person{
public :
。。。。。。
Private :
。。。。。。
};

Java通过包机制实现不同类之间成员的访问权限。
Package org.tyut.a
class Person{
private …..
private ……
public …….
public ……
}
package org.tuyt.b
class Person{
private …..
private ……
public …….
public ……
}
package org.tuyt.c
class Person{
private …..
private ……
public …….
public ……
}

13、C++预处理&java导入包
二者的思路是一样的:想使用当前类以外的类时,
C++中,在类定义前使用#include预编译指令,将要包含的类库包含进来。
标准类库用尖括号<  >,不带h。自定义类库用双引号“”,带h,会先从当前路径查找。
如:
#include  <iostream>
#include “demo.h”

Java中,将要使用的类导入进来,使用import命令,要注明类所在的包。
如:
imort  java.Lang.* ;
import  org.tyut.* ;

 

分享到:
评论
1 楼 zeeeitch 2009-11-28  
想对第3点说一下


java的垃圾回收和finalize函数做清理,属于“不确定性”清理,和析构函数思想不一样,finalize基本没什么作用,我看没什么人写

和c++析构特性一起提出的RAII,对应的java还是使用代理模式进行资源监控,如spring对事务的自动处理那样

相关推荐

    c++与Java的异同

    比较详细的说明了C++和java的相同点和不同点,对于还在犹豫学习C++还是java的同学是很好的参考资料哦。

    C++转换JAVA工具

    "C++转换JAVA工具" 提供了一种解决方案,使得开发者可以从C++代码无缝过渡到Java代码,或者将Java代码转换为C++,以适应不同的开发需求和环境。这种工具的主要目标是提高开发效率,降低维护成本,以及实现平台间的...

    面向对象编程C++和Java比较教程 中英文完整版 pdf

    本教程对比了两种广泛应用的面向对象语言——C++和Java,帮助读者深入理解两者之间的异同。 C++是Bjarne Stroustrup于1983年创建的,它是C语言的扩展,增加了类、模板、异常处理等面向对象特性。C++强调性能和灵活...

    C_C++程序员Java编程

    下面将详细讨论C++与Java之间的异同以及如何从C/C++过渡到Java编程。 首先,C++是C语言的一个扩展,增加了面向对象编程(OOP)的概念,如类、对象、继承、多态等,同时保留了C语言的底层控制能力。C++适合开发系统...

    Java与C_C++异同

    ### Java与C/C++的主要异同点 #### 一、引言 随着计算机科学的发展,各种编程语言应运而生,其中Java、C和C++是最为广泛使用的三种语言之一。Java是由Sun Microsystems公司于1995年推出的一种完全面向对象的编程...

    C++与java异常处理

    简单,易懂的方式讲解C++与java异常处理的方法,两者的异同

    Java转C++代码工具 J2C

    同时,理解Java和C++两种语言的异同是非常重要的,这样可以更好地理解和调试转换结果。 总的来说,Java转C++代码工具J2C为开发者提供了一种将Java项目迁移到C++环境的可能性,但这个过程并不简单,需要对两种语言都...

    c++ and java 语言基础

    C++和Java的异同点也是学习的重点。C++强调性能和控制,而Java注重易用性和跨平台。C++有指针,可以直接操作内存,而Java没有裸指针,内存管理由JVM负责。C++的模板功能强大,而Java有泛型作为代替。C++支持函数重载...

    c++程序员JAVA编程.rar

    1. **JAVA语言概述**:了解JAVA的历史、特点、运行机制以及与C++的异同。JAVA是一种跨平台的面向对象语言,它的垃圾回收机制和自动内存管理与C++有着显著的区别。 2. **JAVA语法基础**:学习JAVA的基础语法,包括...

    比较学习C++与java

    本人学习过程中总结的,涵盖C++大部分知识点以及其中JAVA与之异同之处,通过不同颜色进行标注,非常显眼,给你一目了然的感觉,谢谢!

    c#与java异同(绝世之作)

    "C#与Java异同" C#和Java是两种流行的编程语言,都是面向对象的编程语言,但它们之间存在着许多异同点。本文将对C#和Java进行比较,总结它们之间的相同点和不同点,以便更好地理解这两种语言。 一、C#、C++和Java...

    "易语言.飞扬”与 JAVA、C#、C++ 的异同

    飞扬”与 JAVA、C#、C++ 的异同 #### 易语言.飞扬简介 “易语言.飞扬”是中国本土开发的一款面向对象的编程语言,旨在为国内程序员提供一种更加贴近中文思维习惯的编程工具。相较于其他编程语言,“易语言.飞扬”在...

    C++写的服务器与Java写的客户端通过Socket通信java代码

    在IT领域,网络通信是应用程序之间交互的重要方式。Socket编程是一种常见的网络通信机制,它允许不同计算机上的...对于C++服务器和Java客户端的代码实现,需要深入理解两者在网络编程上的异同,并熟练掌握各自的API。

    算法设计、分析与实现从入门到精通:C、C++和Java _源代码

    《算法设计、分析与实现从入门到精通:C、C++和Java 源代码》是一本面向初学者和进阶者的专业书籍,其主要内容涵盖了算法的基础知识、设计技巧、分析方法以及实际编程实现。这本书的独特之处在于它提供了C、C++和...

    浅析C语言和Java语言的异同.pdf

    浅析C语言和Java语言的异同 本文对C语言和Java语言的异同进行了比较和分析,从它们的起源、特点、开发环境、程序调试过程、应用领域等方面进行了比较和归纳。 1. 起源 C语言是在1970年代初由贝尔实验室的两位...

    JAVA、C、C++常见面试题汇总

    ### JAVA、C、C++常见面试题汇总:深入解析与扩展知识点 #### 一、抽象类与接口的区别 **抽象类(Abstract Class)** - 抽象类是一种包含抽象方法的类,它允许声明方法而不需要实现。抽象类主要用于定义一系列具有...

    c++--++==java

    不过,这确实暗示了我们要探讨的是两种语言的异同以及Java的发展历程。 Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems于1995年推出。它的设计目标是“一次编写,到处运行”(Write Once, Run ...

    OOP语言技术比较:Java,C++,Object Pascal[1]

    标题和描述均提到了“OOP语言技术比较:Java,C++,Object Pascal”,这表明文章将对这三种面向对象编程(OOP)语言进行深入的技术对比分析。OOP是现代软件开发的核心概念之一,它通过封装、继承、多态等特性提供了...

    java 与c++的比较

    ### Java与C++的比较分析 #### 一、引言 在软件开发领域,随着技术的不断进步,软件工程师往往需要掌握多种编程语言以适应不同的项目需求。本文将重点对比两种广泛使用的编程语言:Java与C++。通过深入探讨它们...

    C、C#、C++、Java 中定义以为数组的方式

    在本篇文章中,我们将深入探讨在C、C#、C++以及Java这四种编程语言中如何定义和使用数组。每种语言都有其独特的语法和特性,因此了解它们之间的差异对于跨平台开发非常重要。 ### 一、C语言中的数组定义 在C语言中...

Global site tag (gtag.js) - Google Analytics