繁体   English   中英

C ++中的Java接口

[英]Java Interface in 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 ++接口上的正确实现吗?

谢谢,帕特里克

是的,您将接口定义为包含纯虚函数(其纯净度由= 0表示)的抽象类 ,就像这样。 像Java的接口一样,抽象类不能直接实例化,而必须由覆盖并实现纯虚函数的具体类派生。

有几个问题:

  • 介绍班级的关键字是class而不是Class
  • 您需要通过引用IPerson &而不是值来获取IPerson参数; 抽象类不能按值传递。 Ward论点可能也是如此。 即使不是抽象的,您也可能希望此类引用一个病房(就像Java版本一样),而不是复制一个病房。 与Java不同,除非将类对象传递给函数,否则将传递对象的副本,除非您特别要求通过引用传递该对象。

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

是的,这与Java的接口概念非常接近。

请注意,C ++实际上没有将接口的概念与类分开的概念。 但是,对于C ++开发人员来说,通常是将没有数据成员并且其方法都完全是虚拟的类作为接口来引用-这是程序员(而不是语言本身)做出的区分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM