如何在C+中实现接口或类接口关系+;?与.h文件和void()混淆=0 我在C++中看到了下面两个实现,关于类的定义和声明,这使我困惑了要选择什么,请看这个: Class A_Interface { public : virtual void Show() = 0; } Class A : A_Interface // implements class { // implements methods }

如何在C+中实现接口或类接口关系+;?与.h文件和void()混淆=0 我在C++中看到了下面两个实现,关于类的定义和声明,这使我困惑了要选择什么,请看这个: Class A_Interface { public : virtual void Show() = 0; } Class A : A_Interface // implements class { // implements methods },c++,interface,C++,Interface,但是,不管怎样,我们有一个分离的定义,它是这样的: 文件: MyClass.h class MyClass { void Show(){}; } 在MyClass.cpp中: MyClass::show(){ /......../ } 以上两者有什么不同?它们都是“接口”吗 因为我们需要一个接口来实现我们的类,而上述两种方法似乎都可以实现这一点。这里的接口是抽象类(接口),因为它有纯虚拟的函数成员 virtual void Show() = 0; 现在考虑MyClass;所有声

但是,不管怎样,我们有一个分离的定义,它是这样的:

文件:

MyClass.h

class MyClass
{
   void Show(){};
}
在MyClass.cpp中:

MyClass::show(){
  /......../
}
以上两者有什么不同?它们都是“接口”吗


因为我们需要一个接口来实现我们的类,而上述两种方法似乎都可以实现这一点。

这里的接口是抽象类(接口),因为它有纯虚拟的函数成员

 virtual void Show() = 0;
现在考虑MyClass;所有声明都在MyClass.h中,实现在MyClass.cpp中(这是首选方法)

两者有何不同? 一个是抽象类(不能有A_接口类型的对象,而是必须从中派生类并重写其纯虚函数。)
另一个是简单类。

这里的接口是抽象类(接口),因为它有纯虚拟的函数成员

 virtual void Show() = 0;
现在考虑MyClass;所有声明都在MyClass.h中,实现在MyClass.cpp中(这是首选方法)

两者有何不同? 一个是抽象类(不能有A_接口类型的对象,而是必须从中派生类并重写其纯虚函数。)
另一个是简单类。

当您将其中一个类方法定义为等于零时,您将使该类成为抽象基类,因此它无法实例化(接口)。可以定义抽象基类中的某些方法。虽然不能为抽象基类实例化对象,但可以声明指向它的指针

Class AbstractClass 
{
  public : 
  virtual void Show() = 0;
}

Class DerivedClass: public AbstractClass
{
  public : 
  virtual void Show() = 0;
}


AbstractClass a = DerivedClass() # FAILS TO COMPILE

AbstractClass* a = new DerivedClass() # WORKS!

当您将其中一个类方法定义为等于零时,您将使该类成为抽象基类,因此它不能被实例化(接口)。可以定义抽象基类中的某些方法。虽然不能为抽象基类实例化对象,但可以声明指向它的指针

Class AbstractClass 
{
  public : 
  virtual void Show() = 0;
}

Class DerivedClass: public AbstractClass
{
  public : 
  virtual void Show() = 0;
}


AbstractClass a = DerivedClass() # FAILS TO COMPILE

AbstractClass* a = new DerivedClass() # WORKS!

您可能需要编写一个头文件,定义接口类

// MyInterface.h -- Header file for MyInterface

#pragma once

class MyInterface
{
public:
    // Empty virtual destructor: good practice for proper cleanup
    virtual ~MyInterface() {}

    // Interface methods are pure virtual:
    virtual void Show() = 0;
    // ... some other methods in the interface...
};
然后您可以有一个实现上述接口的,在头文件和.cpp实现文件之间分割代码:

// MyClass.h -- Header file for MyClass

#pragma once

#include "MyInterface.h" // Include interface's header file

class MyClass : public MyInterface
{
public:
    // Methods implemented from MyInterface
    void Show() override;

    // NOTE: "override" is a new C++11 feature.
    // If you are using an older C++98/03 compiler, you can't use it.

    // Other class stuff...
};
您可以在.cpp文件中实现MyClass:

// MyClass.cpp -- Implementation of MyClass

#include "MyClass.h" // MyClass's header file

// Implementation

void MyClass::Show() 
{
    // ... code
}

您可能需要编写一个头文件,定义接口类

// MyInterface.h -- Header file for MyInterface

#pragma once

class MyInterface
{
public:
    // Empty virtual destructor: good practice for proper cleanup
    virtual ~MyInterface() {}

    // Interface methods are pure virtual:
    virtual void Show() = 0;
    // ... some other methods in the interface...
};
然后您可以有一个实现上述接口的,在头文件和.cpp实现文件之间分割代码:

// MyClass.h -- Header file for MyClass

#pragma once

#include "MyInterface.h" // Include interface's header file

class MyClass : public MyInterface
{
public:
    // Methods implemented from MyInterface
    void Show() override;

    // NOTE: "override" is a new C++11 feature.
    // If you are using an older C++98/03 compiler, you can't use it.

    // Other class stuff...
};
您可以在.cpp文件中实现MyClass:

// MyClass.cpp -- Implementation of MyClass

#include "MyClass.h" // MyClass's header file

// Implementation

void MyClass::Show() 
{
    // ... code
}

也许您应该阅读抽象基类和纯虚函数。网上有很多关于这方面的网页。还可以阅读C++中的一般和头文件等。C++不是一种语言,你可以跳入其中,并按照自己的思路去理解。继续执行<代码>类Myclass:公共AI接口{…/Cord> @丹丹。如果我把它看作是一种简单的语言,我不会问这个问题。我只是想从“接口”方面知道它们之间的区别。也许你应该阅读关于抽象基类和纯虚函数的文章。关于这个页面有很多页面。也可以阅读C++和一般头文件等。C++不是一种语言,你可以跳进并在你前进的时候找出。继续执行<代码>类MyCclass:公共AI接口。{…@dandan如果我认为它是一种简单的语言,我就不会问这个问题。我问它只是为了知道它们在“接口”方面的区别。。