从函数返回一个抽象类

cem*_*ksu 27 c++ abstract-class

是否有可能从函数返回一个抽象类(类本身或引用,无关紧要)?

小智 37

您可以返回一个抽象类指针 - 假设B是一个派生自抽象类的具体类A:

A * f() {
    return new B;
}
Run Code Online (Sandbox Code Playgroud)

或参考:

A & f() {
    static B b;
    return b;
}
Run Code Online (Sandbox Code Playgroud)

或智能指针:

std::unique_ptr<A> f() {
    return std::make_unique<B>(...);
}
Run Code Online (Sandbox Code Playgroud)


Uri*_*Uri 16

您可以将返回类型声明为引用或指向抽象类的指针,以便可以将其指定给抽象类的引用或指针,并根据其接口使用它.

但是,您无法返回实际抽象类的实际实例,因为根据定义您无法实例化它.但是,您可以返回具体子类型的实例,这是足够好的,因为根据替换原则,您应该始终能够使用子类型而不是超类型.


Jus*_*ier 5

不可以,但函数可以具有指向抽象类的指针(或引用)的返回类型。然后它将返回从抽象类派生的类的实例。

  • @incrediman:如果“abstract”是抽象类,则“abstract f()”在 C++ 中无效。 (2认同)