嗨,
在C++内部类中,
class A {
public:
void f1();
private:
void f2();
class B {
private void f3();
};
}
内部类(B)是否有指向其父类(A)的指针?(就像在Java中一样)。并且can B调用它的父类public/private方法(就像在Java中一样)。
谢谢。
发布于 2010-04-22 08:57:18
否--在C++中,嵌套类只影响名称和可见性,而不影响类本身的语义。就生成的代码而言,嵌套的类与未嵌套的类没有什么不同。
所有更改的是可见性和名称(例如,如果它位于外部类的private:
部分,则对外部世界不可见,如果位于public:
部分,则它是可见的,但(当然)要将其命名为outer_class::inner_class
。但它仍然是一个完全独立的类--例如,您可以创建内部类的实例,而不创建外部类的任何实例。
编辑:对不起,我错过了你问题的一部分。在C++ 0x中,内部类确实可以访问外部类的私有部分--本质上,就好像外部类已经将内部类声明为它的朋友,所以私有名称是可见的,但是在调用外部类的任何非静态成员函数之前,您仍然需要将它传递给外部类的对象的引用。
虽然现在还不是这样,但我相信大多数编译器已经实现了这一部分。
发布于 2010-04-22 08:54:42
不,B类没有指向A类的指针,除非您显式添加它。
发布于 2010-04-22 09:05:29
它是否有指向父对象的指针:没有。
它是否有权访问父母的私有成员:某种程度上
我认为,如果标准中没有很好地定义它是否具有访问权限,我可能就错了。
但您可以在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();
}
https://stackoverflow.com/questions/2687544
复制相似问题