当创建嵌套类的实例时,是否也是正在生成的嵌套类的一个实例
When creating an instance of a nested class, is an instance of the nesting class being made too?
创建嵌套类的实例时,是否也生成了嵌套类的一个实例?
如果不是,则子级只能访问父级的静态公共(和受保护的)功能?
例如:
class a {
public:
void baz();
class b {
public:
void foo();
};
};
int main(){
a::b bar; //is an instance of a being made too?
bar.foo();
}
两点:
- 根据问题标题,答案是肯定的,派生类总是包含其基类的子对象。我也更喜欢基类和派生类,而不是父类和子类,因为"is-a"关系。派生类实例是基类实例,但子实例不是父实例
- 针对你的问题主体,你没有父类/子类或基类/派生类。你所拥有的构造是一个嵌套在其他类中的类。这完全不同。基本上,这只是创建了第二个类,该类的名称嵌套在另一个类的"命名空间"中。不过,创建嵌套类的实例并不会创建嵌套类实例
"父/子"术语通常用于描述继承关系,而您的代码没有这些关系。请记住,b
没有任何a
类型的数据成员或基类,所以答案是否定的。没有创建a
类型的对象。
注意,由于是内部类,b
可以访问a
的非公共成员。
void a::b::foo() {
a obj;
obj.some_private_member(); // OK
}
类别b
是类别a
的成员。它是一个嵌套类型声明。该嵌套类型的两个子对象都没有在类a
中声明。因此,您可能不会调用非静态成员函数foo
,因为需要类b
的实例。
另一方面,嵌套类b
的定义不包括类a
的子对象。任何类都只有那些在类定义中声明的成员。
所以在这个声明中
a::b bar; //is an instance of a being made too?
创建了一个类b
的实例,根据其定义,该实例只有一个成员-成员函数foo
类b中给出的新参数将与"a"以及任何其他参数相同。
class a {
public:
void bar();
}
class b : public a
{
public:
void foo();
}
相关文章:
- 创建模板嵌套类实例的语法?
- 另一个类中嵌套模板的外部实例化
- Cllass 函数不解析嵌套类实例或函数
- C++嵌套类实例
- 为什么 clang 不允许通过实例访问嵌套枚举类?
- 为什么Clang无法使用默认的Integer_Sequence实例化嵌套的变异模板
- OpenMP 如何知道嵌套了多少个循环实例
- 声明嵌套基模板类实例是派生类的好友
- 访问嵌套类(如果容器没有其实例)
- 如何在给定包含类的实例的情况下实例化嵌套类
- 外部类的嵌套类定义,而外部类包含内部类的实例
- 私有嵌套类 c++ 的可视化实例
- 嵌套模板类的实例化
- 当创建嵌套类的实例时,是否也是正在生成的嵌套类的一个实例
- 通过外部类的实例访问嵌套的内部类
- 初始化模板类中嵌套类的静态实例
- 如果模板存在嵌套类型(未访问),且该方法无法编译,则模板可以实例化吗?
- 允许嵌套结构具有包含类的实例
- 如何使嵌套类的变量对父类的每个实例都是静态的
- 嵌套类中的类实例化