C ++和Java中的类比/等价

时间:2015-03-25 19:54:12

标签: java c++

两件事:

1. Java中的嵌套类,如C ++中的组合

2.C ++中的虚函数相当于Java中的函数覆盖吗?

5 个答案:

答案 0 :(得分:2)

Java中的嵌套类有两种形式:内部类和静态嵌套类。

C ++中没有内部类的直接等价物。如果你想要它,你需要手动完成,给“内部类”一个指针返回外部类(在每个方法中作为参数,或存储在“内部类”中)。

Java中的静态嵌套类类似于在C ++中声明类中的类。

C ++中的组合是指组合类的实际值存储在另一个类中。 Java中没有类值类型,所有Java类类型都是引用,因此Java中没有直接的等价物。 Java“composition”将存储对“子对象”的引用:这可以通过引用,指针或智能指针在C ++中完成。

C ++ virtual方法类似于Java中的非finalstatic方法。 C ++非虚拟非静态方法在Java中没有真正的等价物(最终方法大致相同,但更类似于C ++中的virtual final方法。您可以在某种程度上覆盖C ++中的虚函数,其方式与在Java中覆盖非静态非最终函数的方式类似:例如,它们都支持协变返回类型(但它们可能不同意协变的内容)。一些细节将会有所不同。

Java和C ++中的

static方法类似。

(我是一名C ++程序员,我对Java的了解几乎完全是对比的问题:相信我对C ++的陈述远不止我对Java的陈述。)

答案 1 :(得分:1)

  1. Java和C ++都支持嵌套类和组合,并且根据 Thomas Matthews'评论:“它们在两种语言中都被视为相同。”
  2. 在Java中,默认情况下所有非静态方法都是虚拟的(您可以使用final使其成为非虚拟方法)。在C ++中,您必须明确标记它们virtual才能覆盖它们。

答案 2 :(得分:1)

  1. 组合是一个设计术语,嵌套类是一种语言机制(可用于实现组合)。正如Thomas Matthews在评论中提到的,两种语言都支持嵌套类。

  2. 默认情况下,Java中的非静态方法表现为polimorphically,即与C ++不同,您不使用virtual关键字使方法成为虚拟方法。关于虚拟方法如何在幕后工作,这个问题有一些很好的答案:Java - Virtual Methods

答案 3 :(得分:0)

1。)Java和C ++支持嵌套类。毕竟,在java中,一个类可以在另一个类的成员数据中拥有一个实例。

Composition只是为其他类提供了一个包装类。

喜欢维基百科的这个例子

class Pond{
private:
    std::vector<ducks*> myDucks;
}

2.。)虚函数是在C ++中用于继承要定义的父类的类在基类中定义的函数。 virtual需要在继承父类的类中重载函数。

答案 4 :(得分:0)

广告。 2. C ++中的方法/虚函数是:

  1. 具有默认实现的方法;
  2. 可以在派生类中重写它,但不必重写;
  3. 它不能是静态的,用于获得多态性;
  4. 我们可以通过基本类型引用该方法 多态性;

从上面可以看出,Java的类似方法是在接口中带有修饰符“ default”的方法,该方法可从版本8开始使用。

示例:

public interface Foo {
   default String bar() {
      return "Foo.bar";
   }
}