gpt4 book ai didi

c++ - 从基类继承时,嵌套类会发生什么情况?

转载 作者:可可西里 更新时间:2023-11-01 15:10:38 24 4
gpt4 key购买 nike

假设我有这些类(class):

class Base
{
public:

class Foo { ... };

...
};

然后另一个类派生自基类:

class Derived : public Base
{
// no mention or redefinition of nested class "Foo" anywhere in "Derived"
};

这是否意味着我们现在有一个不同的 Derived::Foo,或者 Derived::FooBase::Foo 完全相同>?

这个场景有一个转折点:如果有人抛出一个 Derived::Foo 的实例怎么办?在这种情况下会不会被抓到:

catch ( const Base::Foo &ex )
{
// would this also catch an instance of Derived::Foo?
}

最佳答案

Derived::Foo 只是访问 Base::Foo,因此这些只是引用同一类型的两种方式。您可以使用 std::is_same 轻松查看它:

#include <type_traits>

struct Base
{
class Foo {};
};

struct Derived : Base {};

static_assert( std::is_same< Base::Foo, Derived::Foo >::value, "Oops" );

int main()
{
try {
throw Derived::Foo();
}
catch( const Base::Foo& ) {}
}

如您所见,这也意味着用一个名字抛出它并用其他作品捕捉它。

Live example

关于c++ - 从基类继承时,嵌套类会发生什么情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19529241/

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