gpt4 book ai didi

c++ - 在 C++ 中,是否可以将一个类声明为从另一个类继承?

转载 作者:IT老高 更新时间:2023-10-28 13:22:16 26 4
gpt4 key购买 nike

我知道我能做到:

class Foo;

但我可以将一个类声明为从另一个类继承吗,例如:

class Bar {};

class Foo: public Bar;

一个示例用例是协变引用返回类型。

// somewhere.h
class RA {}
class RB : public RA {}

...然后在另一个不包含某处的标题中。h

// other.h
class RA;

class A {
public:
virtual RA* Foo(); // this only needs the forward deceleration
}

class RB : public RA; // invalid but...

class B {
public:
virtual RB* Foo(); //
}

编译器应该处理RB* B:Foo()的声明的唯一信息是RB RA 作为公共(public)基类。现在很明显,如果您打算对 Foo 的返回值进行任何类型的取消引用,那么您将需要somewhere.h。但是,如果某些客户端从不调用 Foo,那么它们就没有理由包含某处.h,这可能会显着加快编译速度。

最佳答案

前向声明仅在告诉编译器具有该名称的类确实存在并且将在其他地方声明和定义时才真正有用。在编译器需要关于类的上下文信息的任何情况下,您都不能使用它,编译器也不能只告诉它关于类的一点点信息。 (通常,您只能在没有其他上下文的情况下引用该类时使用前向声明,例如作为参数或返回值。)

因此,在使用 Bar 来帮助声明 Foo 的任何情况下,您都不能前向声明 Bar,而且包含基类的前向声明完全没有意义——那是什么什么都不告诉你?

关于c++ - 在 C++ 中,是否可以将一个类声明为从另一个类继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2159390/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com