接口C++指针 免责声明:我是一个完整的C++初学者,如果对这个问题有类似的答案,请直接告诉我,因为我可能已经错过了,在理论上不太了解。 所以我正在浏览一些C++代码,我发现了这样的东西:

接口C++指针 免责声明:我是一个完整的C++初学者,如果对这个问题有类似的答案,请直接告诉我,因为我可能已经错过了,在理论上不太了解。 所以我正在浏览一些C++代码,我发现了这样的东西:,c++,pointers,interface,C++,Pointers,Interface,共享ptr 这让我想知道,怎么会有指向接口的指针?当然,指针指向内存中的某个对象,或者我在这里读错了什么 谢谢显然,指针指向内存位置的对象。在这种情况下,它应该指向实现特定接口的某个对象。您是对的,该共享ptr将始终为空或指向具体对象。但共享ptr不知道该对象的具体类型;它所知道的是,它指向实现的任何对象都是直接或间接从anObjectsInterface类派生的。anObjectsInterface很可能是一个抽象基类,它完全是为了这样的目的而创建的:为了传递对象,而不必指定实际实现抽象类的类

共享ptr

这让我想知道,怎么会有指向接口的指针?当然,指针指向内存中的某个对象,或者我在这里读错了什么


谢谢

显然,指针指向内存位置的对象。在这种情况下,它应该指向实现特定接口的某个对象。

您是对的,该共享ptr将始终为空或指向具体对象。但共享ptr不知道该对象的具体类型;它所知道的是,它指向实现的任何对象都是直接或间接从anObjectsInterface类派生的。

anObjectsInterface很可能是一个抽象基类,它完全是为了这样的目的而创建的:为了传递对象,而不必指定实际实现抽象类的类方法

使用您提供的命名的一个最简单的示例如下-在任何提到类层次结构和/或虚拟函数的教程中都可以找到大量这样的示例:

#include <memory>

struct anObjectsInterface {
  virtual int doStuff() const = 0;
};

struct anImplementation : public anObjectsInterface {
  int doStuff() const override {
    return 5;
  }
};

void doStuffWithObject(const std::shared_ptr<anObjectsInterface>& x) {
  x->doStuff();
}

int main() {
  auto object = std::make_shared<anImplementation>();
  doStuffWithObject(object);
}
您将看到doStuffWithObject接受std::shared_ptr,因此不知道这个shared_ptr实际上指向anImplementation类的实例


也要记住,在这样的场景中使用SysDypPTR是不必要的:UNIQUYGPTR会更适合。C++中的

< P>,接口只是一个非纯技术术语,用于只包含纯函数或纯虚拟函数的类。该接口的实现将继承接口类,接口类在完整对象中有一个真正的基类子对象。基类SubBject有一个地址,占用内存,像任何其他对象一样,因此我们可以有一个指针。< /P> < P>不要忘记C++对象模型中的对象是由子对象组成的,包括基本子对象和成员子对象。一个抽象类,或者更一般地说是一个接口,它本身可能不是一个完整的对象,但它很可能是一个更完整对象的子对象。指针可以指向任意对象,包括子对象

示意图:

+-班长-------------------+ | +-----+ +-----+ +-----+ +-----+ | | |*********| |*********| |**********| |*********| | |+-int x-++-Base1-+-bool b-++-Base2-+| +--------------------------+ ^ ^ ^ | | | |+-&a.x+-静态_-cast&x &a; 在这里,我们使用:

struct Base1 { virtual void f() = 0; };
struct Base2 {};
struct Der : Base2, Base1 { int x; bool b; void f() override {} };

Der a;

虚拟函数分派机制的全部目的是,您可以对可能不是最派生对象的对象调用虚拟成员函数,但我们将在运行时查找我们是否是更派生对象的子对象,我们将使用该对象的类对函数的实现。

虽然不是严格要求,但仅或大部分应该说至少有一个。一个接口的所有部分都有默认实现是完全可以想象的,尽管不抽象可能是一种糟糕的风格。我知道有些人认为这是一个糟糕的问题。有人能告诉我为什么会这样吗?另外,对于那些感兴趣的人来说,这是一个相关的问题:为什么这是一个糟糕的问题,或者至少是其中之一,是因为这个网站是用来询问和回答特定问题的。如果你对一门语言一无所知,也没有花太多精力去学习,那么很难具体地回答你的问题。你需要做的是拿起一本介绍性的C++书籍,然后开始阅读它。然后问你不明白的地方。这本书将涵盖这个确切的主题,让你开始理解它,这样你就可以问一个可能在这里回答的具体问题。@NirFriedman啊,好吧,我明白了,我以为理论问题在这里得到了回答。谢谢你的澄清,有些人就是不喜欢初学者的问题。这不是一个对一门语言一无所知的人的问题,因为在大多数初学者的书中,界面上的指针都是高级学科。