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

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;
}

转载于:https://www.cnblogs.com/-OYK/archive/2011/06/15/2081503.html

C++ 与 JAVA的不同点相关推荐

  1. c# java数据类型不同点

    导读:C#和Java是当今最火热的两门面向对象编程语言,很多程序都是既开发Java,也涉足C#.不得不说这两门编程语言有很多共同点,这里主要比较一下Java和C#数据类型的不同之处,这些小的区别有时甚 ...

  2. Groovy与Java的不同点

    本文参考自Groovy文档 Differences with Java,所有代码都是Groovy文档中的,也可以将本文看做英文源文档的简略翻译. Groovy设计时目标之一就是让Java程序员快速习惯 ...

  3. C++与java的不同点

    1.java的二维数组可以每行长度不同,但C++的二维数组每行是相同的长度,除非定义成指针数组,也可以实现每行不同长度 2.C++在赋值时会发生复制现象(http://www.cnblogs.com/ ...

  4. 学Java还是Python?一张图告诉你!

    Java 和 Python 一直都是两种很火很强大的编程语言,对于刚开始起步学习编程的同学来说,会迷惑且最经常问的问题是,我该学 Java 还是 Python,是不是 Python 容易学,或是应该先 ...

  5. java和python哪个好学-Java VS Python 应该先学哪个?

    http://www.tuicool.com/articles/fqAzqi Java 和 Python 是当下两种巨火的巨强大的编程语言,对于刚开始学习编程的同学来说,很是迷惑,最经常问得问题就是, ...

  6. java集合是wftc_Java集合

    一.集合的由来 通常,我们的程序需要根据程序运行时才知道创建多少个对象.但若非程序运行,程序开发阶段,我们根本不知道到底需要多少个数量的对象,甚至不知道它的准确类型.为了满足这些常规的编程需要,我们要 ...

  7. 学python还是java贴吧_是学python还是java?一张图告诉你!

    物联网硬件开发 - 零基础学习电子产品设计 - 创客学院直播室​www.makeru.com.cn Java 和 Python 一直都是两种很火很强大的编程语言,对于刚开始起步学习编程的同学来说,会迷 ...

  8. C# 与java区别总结 收集

    节选自<C++.Java/C#之比较>http://dev.firnow.com/course/3_program/c++/cppsl/2008520/117228.html 使用指针,由 ...

  9. 是学习Java还是Python?一张图告诉你!

    Java 和 Python 一直都是两种很火很强大的编程语言,对于刚开始起步学习编程的同学来说,会迷惑且最经常问的问题是,我该学 Java 还是 Python,是不是 Python 容易学,或是应该先 ...

最新文章

  1. Windows Server 2016 + Exchange 2016 +Office365混合部署(四)
  2. golang经典书籍--go并发编程
  3. Oracle 的基本特点,并完整描述安装过程
  4. SAP中程序间的相互调用,SUBMIT关键字的用法
  5. 快速排序算法_基于位运算的快速排序算法
  6. [BZOJ 2957]楼房重建(线段树)
  7. SAP Customer Data Cloud(Gigya)登录的重定向问题
  8. java 1.6 ubuntu_ubuntu配置 Java SE 1.6
  9. 与大家分享一下2010我的找工作历程!真累啊!不过都已经结束了!
  10. simulink仿真学习(关系运算及逻辑模块、离散时间积分模块)day2
  11. Connected to the target VM, address: ‘127.0.0.1:0‘, transport: ‘socket‘ Disconnected from the target
  12. php 不申明构造函数,PHP的构造函数和同类名函数同时申明时调用的情况
  13. 图书馆管理系统——超期付款
  14. leetcode题解677-键值映射
  15. C++11 就地初始化与列表初始化
  16. 推行5S现场管理的心得体会
  17. 基于transformor的拼音转汉字语言模型。
  18. 重复测量资料纵向研究的数据分析-1
  19. 通用技术 支付笔记之 PayPal 支付原理
  20. 实现数字电视机顶盒画面的纯键盘和遥控操作网页

热门文章

  1. 骨骼捏脸功能的实现方法
  2. git 的右键快捷菜单恢复
  3. SVN switch 用法详解 (ZZ)
  4. hadoop cdh 4.5的安装配置
  5. 《实施Cisco统一通信管理器(CIPT2)》一1.6 拨号计划方面面临的挑战
  6. varnish---反向代理web加速缓存服务器和CDN的推送
  7. SharePoint 2013 图文开发系列之创建内容类型
  8. SqlCommand类,在与数据库交互式一定要用到的属性
  9. c# 自定义控件使其填充方格且自动变换大小
  10. System.Net.Dns.GetHostByAddress(string) 已经过时