在创建嵌套类的实例时,是否也是一个嵌套类的实例?
如果没有,那么孩子只能访问父母的静态公共(和受保护)功能吗?
例如:
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();
}
答案 0 :(得分:2)
父母/孩子"术语通常用于描述您的代码没有的继承关系。请注意,b
没有a
类型的任何数据成员或基类,所以答案是否定的。没有创建a
类型的对象。
请注意,由于是内部班级,b
可以访问a
的非公开会员。
void a::b::foo() {
a obj;
obj.some_private_member(); // OK
}
答案 1 :(得分:2)
两点:
答案 2 :(得分:1)
班级b
是班级a
的成员。它是一个嵌套类型声明。这个嵌套类型的子对象都没有在类a
中声明。因此,您可能无法调用非静态成员函数foo
,因为需要类b
的实例。
另一方面,嵌套类b
的定义不包括类a
的子对象。任何类只有那些在类定义中声明的成员。
所以在这个陈述中
a::b bar; //is an instance of a being made too?
创建了一个类b
的实例,根据其定义只有一个成员 - 成员函数foo
答案 3 :(得分:-1)
b类中给出的新参数与“a”以及任何其他参数相同。
class a {
public:
void bar();
}
class b : public a
{
public:
void foo();
}