Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C+中的Java接口+;_Java_C++ - Fatal编程技术网

C+中的Java接口+;

C+中的Java接口+;,java,c++,Java,C++,第一次发帖,所以请温柔一点 我有一个这样的界面 public interface I_Hospital{ public void registerObserver(I_Person p); public void removeObserver(I_Person p); public void notifyObservers(); public void addWard(Ward ward); } 现在,如果我想在C++中重新创建这个,那么做下面的操作是否正确:

第一次发帖,所以请温柔一点

我有一个这样的界面

public interface I_Hospital{
    public void registerObserver(I_Person p);
    public void removeObserver(I_Person p);
    public void notifyObservers();
    public void addWard(Ward ward);
}

现在,如果我想在C++中重新创建这个,那么做下面的操作是否正确:

IHospital.h

Class IHospital{
    public:
    virtual void registerObserver(IPerson p) = 0;
    etc...
}

这是C++中的接口的正确实现吗??


谢谢,Patrick

Java接口提供了必须由从该接口继承的类重写的方法。这类似于拥有一个抽象的C++基类,即纯虚拟方法,就像你所展示的。因此,是的,这是正确的实现。还请注意,在基类中应该有虚拟析构函数,以便删除指向派生实例的基类指针可以正确调用派生和基类析构函数。

是的,您可以将接口定义为包含纯虚拟函数的抽象类(纯度由
=0
表示),就像这样。与Java的接口一样,抽象类不能直接实例化,但必须由重写和实现纯虚拟函数的具体类派生

有几个问题:

  • 介绍类的关键字是
    class
    not
    class
  • 您需要通过引用获取
    IPerson
    参数,
    IPerson&
    ,而不是通过值;抽象类不能按值传递。这可能同样适用于
    Ward
    参数;即使它不是抽象的,您也可能希望这个类引用一个ward(就像Java版本那样),而不是复制一个。与Java不同,将类对象传递给函数将传递对象的副本,除非您明确要求通过引用传递

是的,这是Java的接口概念


<>注意,C++实际上没有一个接口的概念,它是一个独立于类的事物。然而,C++开发者习惯于引用没有数据成员的类,其方法都是纯虚的接口——这是程序员所做的区别,而不是语言本身。

是,<代码>虚拟符号签名=0;
提供了与Java中的接口相同的语义。。也就是说,您可能希望将其更改为
virtualvoidregisterobserver(IPerson&p)=0使用对p的引用,而不是仅仅传递它。由于C++默认值按值调用,所以所编写的与java无关,转换为引用产生与java代码相同的结果。+ 1,因为花了时间研究它并自己尝试,而不是只询问HoSO,在医院的课堂上我可以使用:<代码>代码<代码>一流医院:ICANDOWS>代码>代码>代码>我在大学里只做了java,所以现在通过C++中的一些作业重写,然后露比