您的位置:首页 > 编程语言 > C语言/C++

比较Java和C++的几个修饰符

2013-11-07 11:32 260 查看
同样是支持面向对象的设计语言,Java和C++的一些修饰符都有共通的地方,但是由于设计理念的不同,这些修饰符也没有完全一样的。
abstract修饰符:

Java中的abstract修饰符语义是抽象性,主要的语法:

修饰一个类,表示这个类是抽象类,抽象类不能被实例化。这在C++中也有同样的概念,只不过C++声明一个抽象类是让类中的任意一个虚函数=0
修饰一个方法,表示这个方法是抽象方法,抽象方法不能有方法实现。这在C++中也有同样的概念,只不过C++中声明一个抽象方法使用virtual关键字,而且C++中别说是虚函数了,就连纯虚函数也是可以有实现的,这主要是为了提供一种默认的实现,在Java中就只好多派生一次了

final修饰符:

Java中的final修饰符语义是不变性,主要的语法:

修饰类,表示该类不能被继承,在C++中要实现不可继承的类可就费劲了,一般要用到高深的虚基类概念
修饰方法,表示该方法不能被重写,在C++中不能重写只需要不用virtual关键字就可以了,但是子类同名覆盖的问题就有点防不胜防了
修饰变量,表示该变量不能被重赋值,在C++中有可爱的const关键字完成相同的功能。但是Java中用final修饰的类类型的变量仍然是可以改变的自己的,因为在Java中是这是引用的语义,而这在C++中是绝对不可能的,C++中这是值的语义。
修饰方法的参数,表示该变量不能被重赋值,在C++中这还是const关键字的语义,不仅如此,C++中的const还能修饰函数返回值,在Java中这也是允许的,但是好像却没有什么实际的意义

static修饰符:

Java中的static修饰符语义是唯一性,主要的语法:

修饰成员变量,表示该变量是类唯一的静态变量,无论有多少类对象被创建,在C++中是相同的
修饰成员方法,表示该方法是类唯一的静态方法,只能操作类中的静态变量,在C++中是相同的
修饰代码块,表示该代码块是类唯一的静态代码块,当类被加载时就执行,在C++中没有这个概念,一般通过一个静态函数就可以搞定的事情,Java中的静态代码块看起来很酷,但是能少用还是少用为好
修饰内部类,表示该类是静态内部类,没有外部类的this指针传递进来,在C++中肯定是这样的,才不会主动给你传递什么外部类的this指针呢,如果想做,程序员自己来
在非静态内部类和局部类中不能有static成员,不了解这条规则是什么道理?在C++中是没有这么强烈的限制的

总结一下:

Java中的abstract,final,static修饰符因为语义的限制都是不能修饰构造函数的,而且abstract和final,abstract和static语义是矛盾的,不能连用,而static和final是可以连用的。

Java中的final关键字和C++中的const关键字语义都是不变性,有一些相同之处,但是区别同样是明显的

Java中的static关键字和C++中的static关键字语义都是唯一性,但是C++中的static因为历史原因还有更多其它的含义。

转自:/article/10990698.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: