`
dolaameng328
  • 浏览: 31030 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

C++ 与 JAVA的不同点

 
阅读更多

 

一、 变量的定义和缺省初始化

c++ 中声明变量的时候大多的进行了定义(即分配了内存),特例有:

1) extent int x,仅仅声明了x,没有为x分配内存。

2) 函数的声明(即在调用函数之前进行的声明,此时未定义)。

3) 类的声明。

java中 方法中的变量在声明时没有初始化,有些人以为会被初始化为null,其实不是.不初始化的话,编译器会报错的.直到被赋值或者被调用。

成员变量则在声明时候被初始化,初始化成一个默认值.比如整数为0,对象则被初始化为null。

C++中基本类型的数据,只在全局的时候才进行缺省初始化

二、 static

由于C++中static的含义要比java广的多。static变量本身有种“共享”的属性,并且共享它的“用户”的权限都是可读可写。其中若有一位改变了它的值,其他的“用户”也只能接受这种改变。对于C++来说:

1) 全局静态变量或者局部静态变量可以让它们相应作用域中的“用户”来使用;

2) 类中的静态成员变量和静态成员函数可以用类名访问或者用对象访问(如果权限允许的话),而且其静态成员变量仅能在类外初始化:

variable_type CLASSNAME:: variable_name = value。

对于java而言,因为java严格遵守oop的思想,static仅体现在类的成员变量和方法上。用法同2),但是其初始化可以在类内部完成。

三、 作用域

C++允许在一个块(block)的子块中定义与此块中相同的变量名,并且子块变量中完全覆盖父块的变量。JAVA是不允许的 。

四、 运算符重载

java 并没有像C++那样提供运算符重载功能,因此java里用“==”判断字符串相等不再实用(此时的“==”只是表示位置的相同, 虽然位置相同的字符串一定相同,但是值相同的字符串未必在同一位置),此时需要用方法equals(String str)。

五、 功能强大的 “for each”循环

java中有这样的for循环语句: 
for(element:collection)

其中collection 是实现了interable接口的集合,C++中则没有此语句。

六、 对象赋值引用

此处是最容易忽视的,也是最严重的区别,Test.java文件中有如下代码: 
    public class Test 
{    
    public Test(int value) 
    { 
        this.value = value; 
    } 
    public void print() 
    { 
        System.out.println(value); 
    } 
    public void setValue(int value) 
    { 
        this.value = value; 
    } 
    private int value; 
    public static void main(String args[]) 
    { 
        Test test1 = new Test(1); 
        Test test2 = test1; 
        test2.setValue(2); 
        test1.print(); 
    } 

此时,输出为2。可见java中的对象间"="操作相等于C++中"&"(引用)一样,C++对象的"="操作实际上是拷贝操作,相当于JAVA中的clone(Object other)方法。而对于数组,JAVA中也将之作为对象看待,比如如下语句: 
        int[] intArr = {1,2,3}; 
        int[] intArr2 = intArr; 
        intArr2[0] = 3; 
        System.out.println(intArr[0]); 
输出值为3。

七、 默认的动态绑定

JAVA中子类会自动覆盖父类的同名方法,而不用像C++,将父类方法声明为vitual型。如果不想让子类覆盖,应该实用final修饰。也就是说:C++默认是不覆盖的,要覆盖需要主动说明;而JAVA默认是覆盖的,要取消覆盖需要主动说明。

八、 多重继承与接口

多重继承(Multiple inherit)容易带来歧义和重复继承,远比单一继承复杂。JAVA声称自己并不支持多重继承,但是它巧妙地利用了接口(interface)的概念, 实现了多重继承的功能,实际上C++中在多重继承时也经常使用无成员变量的虚拟基类(abstract class)这实际上相当于JAVA中的接口。形象地说,JAVA中的接口更像是一种“规则”。比如Comparable 接口,所有要实现比较对象操作的类都得遵守Comparable的规则,即要实现CompareTo方法。而多重继承中的父类不仅仅是实现定义规则的功 能,还提供一些数据和方法。

九、 C++中的嵌套类和java中的内部类

C++中嵌套类相当于“局部类”,相当于局部变量,可以解决名字冲突和访问控制。java中的内部类则远比C++复杂,由于java并没有变量覆盖的概念(参见第三条),所以内部类的设计初衷就与C++的嵌套类有很大区别。其功能如下:

1) 内部类可以方便地访问其外部类的任何成员(如同外部类的方法)。

2) 内部类可以用private来修饰,此时仅有外部类可以创建其实例。

(待续)

十、JAVA函数参数传值调用,参数如果是基本类型,参数本身不可变;如果是对象引用,引用不可以指向新的对象。
 这里有三个原则:
 1、对于基本类型的参数,函数不能改变其值
 2、对于对象引用参数,函数不能其引用目标
 3、对于对象引用参数,函数可以改变其引用对象的状态
因此,在C++里可行的swap(T& t1, T& t2)(或者swap(T *pt1,T *pt2))函数,在C++里是做不到的。要想交换两个变量的值,除非将他们放入一个类,然后用上面的第三种方法来交换。
 如下:
class Test
{
public int i0 = 0;
public int i1 = 1;
}
swap(Test t)
{
 int tem = t.i0;
 t.i0 = t.i1;
 t.i1 = tem;
}

 

分享到:
评论

相关推荐

    C++代码转java工具

    C++和Java是两种不同的编程语言,每种都有其独特的语法和特性。C++是一种静态类型、编译式的、通用的、大小写敏感的、不仅支持过程化编程,也支持面向对象编程的语言。而Java是一种面向对象的、跨平台的、动态类型的...

    面向对象编程:C++与Java比较教程 英文版

    本书《面向对象编程:C++与Java比较教程》详细比较和对比了当今最流行的两种编程语言C++和Java,旨在教授互联网时代至关重要的技能和面向对象编程技术。作者Avinash C. Kak凭借其成功教授的课程,撰写了一本全面的...

    《C++ for Java Programmers》高清完整英文PDF版

    此外,还讨论了C++与Java在语法上的一些不同点。 知识点四:函数、数组、字符串与参数传递。书中讲解了C++中的函数定义与调用、函数重载、默认参数、内联函数和单独编译。同时对数组和字符串的使用、多维数组以及...

    C++与Java混合编程实例

    本主题聚焦于"C++与Java混合编程实例",这涉及到如何在C++和Java这两种不同语言之间进行交互,以实现代码复用、性能优化或是利用两者的优势。 C++是一种静态类型的、编译式的、通用的、大小写敏感的、不仅支持过程...

    C++与Java混合编程

    本文将详细介绍C++与Java混合编程的相关知识点,重点讨论实现这两种语言相互调用的技术细节。 #### C++与Java混合编程的重要性 - **提高灵活性**:结合C++的高性能特性和Java的平台独立性,可以在项目中发挥各自的...

    实战-C++调用Java函数

    首先,我们要理解标题"实战-C++调用Java函数"所涉及的核心知识点。C++是一种强大的系统级编程语言,而Java则以其平台无关性和丰富的类库受到广泛应用。有时,我们可能需要利用C++的高效性能和Java的跨平台特性,这就...

    c++与Java的异同

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

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

    总的来说,C++和Java在面向对象编程上有许多共同点,但各自的侧重点不同。C++更适合需要底层控制和高效性能的场景,而Java则在跨平台应用和企业级开发中占据主导地位。本教程的中英文完整版将详细阐述这些差异,帮助...

    从java到c++,适合java程序员快速学习c++

    * C++ 中对类的定义与 Java 有些不同,其中的 public 和 private 部分是分开的,而 Java 中,每一个元素都必须标明 public 或 private。 * C++ 中类的定义只包含函数的声明,真正的实现另外单独列出。 * 访问函数...

    C、C++、JAVA数据结构与算法电子书

    以下是对这三种语言在数据结构与算法方面的一些关键知识点的详细阐述: 1. **数据结构**: - **数组**:基本的数据结构,用于存储同类型元素的集合。C、C++中的数组是静态的,大小在声明时确定,而Java中的数组...

    java与c++传文件程序

    在C++中,也需要确保文件读写时使用的编码与Java端一致。 5. **端口配置**:Socket通信需要指定通信的端口号,这个端口必须是未被其他程序占用的。项目允许用户自定义端口,以适应不同环境的需求。 6. **文件保存...

    java c++互通的加密算法

    **Java与C++互通的关键点**: 1. **数据格式一致性**:确保在Java和C++中使用的加密库生成的加密结果是一致的。这可能需要对输入数据和密钥进行相同的预处理。 2. **密钥管理**:密钥必须在两个环境中安全地共享。这...

    Android-JNI完整工程,实现c++调用java和java调用c++

    这个完整工程展示了如何在Android应用中使用JNI,实现C++与Java之间的双向调用。这种技术在需要高效计算、利用硬件加速或者复用已有的C/C++库时非常有用。 1. **JNI基础知识**: - JNI接口提供了Java虚拟机(JVM)...

    java与c++通过socket通信

    例如,C++中的结构体可以通过`htonl`、`htons`等函数进行字节序转换,以适应网络传输,因为Java和C++可能在不同的机器架构上运行,字节序可能不同。 总之,Java和C++通过Socket通信涉及到网络编程的基本概念、数据...

    java调用C++ webservice

    在IT行业中,跨语言通信是常见的需求,尤其是在Java和C++这样的不同编程环境中。本话题主要探讨如何使用Java调用由C++实现的Web服务(Webservice)。在给出的描述中,提到了通过WSDL(Web Services Description ...

    比较学习C++与java

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

    C++与Java混合编程.docx

    在混合编程中,字符串处理是一个关键点,因为Java的字符串默认使用UTF-8编码,而在C++中可能需要进行编码转换以避免乱码问题。JNI提供了一些辅助函数,如`GetStringUTFChars`和`NewStringUTF`,用于在C++和Java之间...

    JAVA调用C++编写的DLL(C++和JAVA源码)

    标题中的"JAVA调用C++编写的DLL"涉及到的主要技术点是JNI(Java Native Interface),这是Java平台提供的一种机制,允许Java代码和其他语言写的代码进行交互。JNI使得Java应用程序可以直接调用C/C++的函数,或者让C/...

Global site tag (gtag.js) - Google Analytics