`

从JAVA到C++的区别 (转)

 
阅读更多

一个完整的C++程序包括头文件(.h)和文本文件(.cpp).当然两者都不是必须存在的.只要有其中之一就可以.

1.C++使用#include预处理器指示符来将头文件引入而成为我们程序的一部分.它将读入指定文件的内容,有两种格式
#include <some_file.h>
#include "my_file.h"
我们可以把用"<"和">"引入的头文件理解成是一个工程或者标准头文件(系统提供的).查找过程会检查预定义的目录.
而用引号括起来则表明该文件是用户提供的头文件.查找将从当前文件目录开始.
这个include我觉得类似于JAVA的import

2.注释方法一样

3.类文件的定义.严格来说并没有类文件的说法.我是为了和普通的cpp文件区分开来才这么说的.C++中类的声明写在头文件中
声明一个类:

class test{
public:void test1();
private:void test2();
};



注意这里的写法.最后那个大括号后面必须要跟一个分号的.JAVA则不用.我一开始及其不适应.
然后在cpp文件中来定义

void test::test1(){
cout << "aaa";
}
void test::test2(){
cout << "bb";
}


注意:这里大括号后面有没有带分号都没关系.

4.C++中对函数的调用方法也灵活.

test t;
t.test2();
----------------
test* t = new test();
t->test2();


其实我还是喜欢test t = new test();t.test2() 

5.编译器的解析.如果没有引入头文件的话你必须把main()函数放到文件的最下面.

void main(){
test();
}
void test(){
cout << "aa";
}



这样写编译器会报找不到test()方法的.这个是C遗留下的问题.解决方法就是引入头文件,或者把main写到最后.或者在main前面声明一下:

void test();
void main(){
test();
}
void test(){
cout << "aa";
}


这种做法就和引入头文件差不多了.

6.析构函数.这个特性很有用,在类消失的最后一刻自动调用这个种类型的函数来做一些清除操作

7.争议比较大的声明指针类型.
int* pt=0;
int *pt=0;
这个星号是紧跟着类型呢还是紧跟着变量名呢.由于C++的灵活度太高.这两种写法都没错误.但按理来说紧跟着类型应该会好一些.因为我们是在声明一个指针类型的变量.但如果按下面的写法:
int* pt,pt1;
你说pt1是指针类型吗,答案是不是.遇到这种情况就要把*号紧跟着变量名了
int *pt,*pt1;

耐心点,接下来的是精华

main 函数
C++
//自由浮动的函数
int main( int argc, char* argv[])
{
    printf( "Hello, world" );
}
Java
// 每个函数(方法)都必须是一个类的一部分;当java <class>运行是一个特定类的主函数会被调用
// (因此你可以让每个类都有一个main函数,这在写单元测试是很有用)
class HelloWorld
{
    public static void main(String args[])
    {
        System.out.println( "Hello, World" );
    }
}

 

类的声明
除了 Java 不要求用分号外几乎是相同的。 
C++
    class Bar {};
    
Java
    class Bar {}

方法声明
   都相同的, 除了在Java,方法必须总是某个类的一部分并且可能public/private/protected 作为修饰


构造函数和析构函数
构造函数都是相同的 (即类的名字), Java没有准确意义上的的析构函数

静态成员函数和变量
方法声明是相同的, 但 Java 提供静态初始化块来来初始化静态变量 (不需要在源文件中声明): 
class Foo 
{
    static private int x;
    // 静态初始化块
    { x = 5; }
}

对象的声明
C++
    // 在栈中
    myClass x;
 
    //或者在堆中
    myClass *x = new myClass;
    
Java
   // 总是在对堆中声明
    myClass x = new myClass();

 

继   承
C++
    class Foo : public Bar
    { ... };
    
Java
    class Foo extends Bar
    { ... }

访问级别 (abstraction barriers)
C++

   public:
        void foo();
        void bar();
    
Java
    public void foo();
    public void bar();

虚函数
C++
    virtual int foo(); // 或者非虚函数写作 int foo();
    
Java
    // 函数默认的就是虚函数; 用final关键字防止重载
    int foo(); // 或者, final int foo();

 

内存管理
大体上是相同的--new 来分配, 但是 Java没有 delete,因为它有垃圾回收器。

NULL vs null
C++
    // 初始化一个指针为 NULL
    int *x = NULL;
    
Java
   // 编译器将捕获使用未初始化的引用
   //但是如果你因需要初始化一个引用而赋一个null,那么这是无效的
    myClass x = null;

布尔型
Java有一点罗嗦: 你必须写 boolean而不止是 bool. 
C++
   bool foo;
Java

     boolean foo;

常   量
C++
    const int x = 7;
    
Java
    final int x = 7;

抛异常
首先,Java在编译器强制抛异常—如果你的方法可能会抛异常你必需明确报告 
C++
     int foo() throw (IOException)
Java
     int foo() throws IOException

数     组
C++
    int x[10];
    // 或
    int *x = new x[10];
    // 使用 x,然后归还内存
    delete[] x;
    
Java
    int[] x = new int[10];
    // 使用 x, 内存有垃圾回收器回收或
    //或在程序生命周期尽头归还给系统

集合和迭代器
C++

迭代器是类的成员。范围的开始是<容器>.begin(), 结束是 <容器>.end()。 用++ 操作符递增,  用 *操作符访。 
    vector myVec;
    for ( vector<int>::iterator itr = myVec.begin();
          itr != myVec.end();
          ++itr )
    {
        cout << *itr;
    }
    
Java
迭代器只是一个接口。 范围的开始是 <集合>.iterator,你必须用itr.hasNext()来查看是否到达集合尾。 使用itr.next()(是在C++中使用操作符++ 和*操作的结合)来获得下一个元素。 
    ArrayList myArrayList = new ArrayList();
    Iterator itr = myArrayList.iterator();
    while ( itr.hasNext() )
    {
        System.out.println( itr.next() );
    }
 
    // 或, 在Java 5中
    ArrayList myArrayList = new ArrayList();
    for( Object o : myArrayList ) {
        System.out.println( o );
    }

    
抽象类
C++
    // 只需要包含一个纯虚函数
    class Bar { public: virtual void foo() = 0; };
    
Java
    // 语法上允许显示的声明!
    abstract class Bar { public abstract void foo(); }
 
    // 或者你也可以声明一个接口
    interface Bar { public void foo(); }
 
    // 然后让一个类继承这个接口:
    class Chocolate implements Bar
    {
        public void foo() { /* do something */ }
    }
    
引用 vs  指针
C++
    //引用不可改变,通过使用指针来获得更多的灵活性
    int bar = 7, qux = 6;
    int& foo = bar;
    
Java
    // 引用是可变的,仅存储对象地址; 
    //没有指针类型
    myClass x;
    x.foo(); // error, x is a null “pointer”
 
    // 注意你要总是用 . 来访问域
    
编 译
C++
    // 编译
    g++ foo.cc -o outfile
    // 运行
    ./outfile
    
Java
   // 编译foo.java文件中的类成<classname>.class    javac foo.java 
    // 通过调用<classname>中的静态main方法来运行
    java <classname>
    
注   释
两种语言是一样的 (// 和 /* */ 可以用)

转自:http://www.blogjava.net/RiKeR/articles/139269.html

分享到:
评论

相关推荐

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

    "从 Java 到 C++, 适合 Java 程序员快速学习 C++" 这篇文章旨在帮助 Java 程序员快速学习 C++,通过比较 Java 和 C++ 的区别,帮助读者快速理解 C++。以下是从 Java 到 C++ 的知识点总结: 数据类型和变量 * C++ ...

    C++代码转java工具

    标题“C++代码转Java工具”暗示了一个软件或服务的存在,它的功能是自动化C++源代码到Java源代码的转换。这种工具通常通过分析C++的语法结构,然后生成相应的Java代码来工作。然而,需要注意的是,由于C++和Java的...

    C++转换JAVA工具

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

    Java转C++代码工具 J2C

    总的来说,Java转C++代码工具J2C为开发者提供了一种将Java项目迁移到C++环境的可能性,但这个过程并不简单,需要对两种语言都有深入的理解。转换工具只是第一步,后续的工作包括代码审查、调试和优化,才能确保转换...

    C++转Java工具

    标题中的"C++转Java工具"指的是一个程序,它能够帮助开发者将C++编写的代码转换为Java语言。这种工具在跨平台开发或者需要利用Java特性,但已有大量C++代码库的情况下尤其有用。JNI(Java Native Interface)是Java...

    JAVA 转C++工具

    JAVA代码转C++代码的工具,可以按照目录进行转换,虽然不是全部都转换的很好,但还是不错的

    CPlus_to_Java_Converter;C++转java工具

    《C++到Java转换器:理解跨语言编程的挑战与实践》 在计算机科学领域,跨语言编程是一项关键技能,特别是在需要利用不同编程语言的优势时。C++和Java是两种广泛应用且具有各自特点的编程语言。C++以其高效、灵活和...

    c++ 转换 java c# 转换 java c++ 转换 c#

    转换时,C++的类需要映射到Java的类,指针通常会转化为Java的引用,而内存管理则从手动管理(C++的new和delete)转变为自动垃圾回收(Java的GC)。`Free Edition CPlusPlus to Java Converter.zip`可能是一个工具,...

    C++头文件转JAVA JNA接口类

    在IT行业中,跨语言通信是常见的需求之一,尤其是在Java与C++之间。为了实现这种通信,我们可以使用Java Native Access(JNA),它是一种无需编写原生代码就能直接调用操作系统API或其他本地库的Java库。本篇文章将...

    java/c++区别

    【Java和C++的区别】 Java和C++是两种广泛使用的编程语言,它们在设计目标、语法、内存管理和执行效率等方面存在显著差异。 (一) 序言 此文档旨在全面对比Java和C++,整合了网络上的众多资源,旨在帮助读者理解和...

    java转C++,专用工具类

    Java转C++是一种技术,主要用于将已有的Java代码转换为C++代码,以便在不支持Java虚拟机(JVM)的环境中运行或者为了利用C++的特定性能优势。本项目提供了一个专用工具类,用于自动化这个过程。下面将详细介绍这个...

    从C++转到Java需注意的地方

    从C++过渡到Java,开发者需要注意以下几个关键点,以便更好地适应纯面向对象的Java编程。 1. **内存管理与垃圾回收** 在C++中,程序员需要手动进行内存分配和释放,而Java则采用了自动垃圾回收机制。Java的垃圾...

    Tangible Software Solutions 源代码转换可在 VB.NET、C#、Java、C++和Python之间

    Tangible Software Solutions 是功能齐全的源代码转换软件,可在 VB.NET、C#、Java、C++和Python之间,使用简单,功能丰富,灵活的进行选择和操作,界面友好。 C# to C++ 转换 C# to Java 转换 C# to VB 转换 C++ ...

    java转c++软件(代码级别)

    J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。

    C++库封装JNI接口-实现java调用c++

    在跨平台的软件开发中,有时我们需要在Java和C++之间进行交互,这通常是由于性能需求、使用已有的C++库或特定硬件接口的原因。Java Native Interface (JNI) 是Java平台提供的一种机制,允许Java代码和其他语言写的...

    从C++编程转到Java编程.rar

    在IT行业中,编程语言的选择和转换是常见的议题。本文将深入探讨从C++编程转向Java编程的相关知识点,帮助...从C++转到Java需要学习新的概念和技术,但掌握这两门语言将使程序员具备更广泛的技能和解决问题的能力。

    The diffenences bwtween Java and C++ (JAVA与C++区别)

    ### JAVA与C++的区别 #### 摘要 本文旨在对比C++与Java这两种重要的计算机编程语言的特点。从复杂度、语法差异、内存管理等多个方面进行对比分析。 #### 关键词 C++;Java;差异 #### 引言 C++是一种广泛应用...

    java调用C++ webservice

    在IT行业中,跨语言通信是常见的需求,尤其是在Java和C++这样...总之,Java调用C++ Web服务是一个涉及到多种技术栈的过程,包括WSDL解析、SOAP通信、跨语言数据映射等。理解这些概念并熟练应用是实现跨语言通信的关键。

Global site tag (gtag.js) - Google Analytics