HI,
在C ++内部类中,
class A {
public:
void f1();
private:
void f2();
class B {
private void f3();
};
}
内部类(B)是否有指向其父类(A)的指针? (就像在Java中一样)。 并且B可以调用其父类的公共/私有方法(就像在Java中一样)。
谢谢。
答案 0 :(得分:28)
否 - 在C ++中,嵌套类只影响名称和可见性,而不影响类本身的语义。就生成的代码而言,嵌套类与未嵌套的类没有区别。
所有改变的是可见性和名称(例如,如果它在外部类的private:
部分中,它对外部世界是不可见的,如果它在public:
部分中,则是可见,但(当然)命名它使用outer_class::inner_class
。它仍然是一个完全独立的类 - 例如,您可以创建内部类的实例而无需创建外部类的任何实例。 / p>
编辑:对不起,我错过了你的部分问题。在C ++ 0x中,内部类可以访问外部类的私有部分 - 实质上,就好像外部类已经将内部类声明为其朋友,因此私有名称是可见的,但是您仍然需要在它可以调用外部类的任何非静态成员函数之前,将它传递给类外部对象的引用。
虽然事实并非如此,但我相信大多数编译器已经实现了这一特定部分。
答案 1 :(得分:7)
不,B类没有指向A类的指针,除非您明确添加它。
答案 2 :(得分:0)
是否有指向父母的指针:不。
它是否可以访问父母私人成员:排序
我认为如果它有访问权限在标准中没有明确定义我可能是错的。
但你可以用g ++访问它
#include <iostream>
class X
{
class Y
{
public:
Y(X* p)
:parent(p)
{}
void TryY()
{
// Access a private member of X
++(parent->value);
}
private:
X* parent;
};
public:
X()
:y(this)
{
value = 4;
}
void TryY()
{
y.TryY();
std::cout << value << std::endl;
}
private:
Y y;
int value;
};
int main()
{
X x;
x.TryY();
}