C++ 关于C++;内部阶级
嗨C++ 关于C++;内部阶级,c++,C++,嗨 内部类, class A { public: void f1(); private: void f2(); class B { private void f3(); }; } 内部类(B)是否有指向其父类(a)的指针?(就像在Java中一样)。 can B可以调用其父类public/private方法(就像在Java中一样) 谢谢。 < P>不,B类没有指针A类,除非显式添加它。< P>不——在C++
class A {
public:
void f1();
private:
void f2();
class B {
private void f3();
};
}
内部类(B)是否有指向其父类(a)的指针?(就像在Java中一样)。
can B可以调用其父类public/private方法(就像在Java中一样)
谢谢。
< P>不,B类没有指针A类,除非显式添加它。< P>不——在C++中,嵌套类只影响名称和可见性,而不影响类本身的语义。就生成的代码而言,嵌套类与非嵌套类没有区别 更改的只是可见性和名称(例如,如果它位于外部类的private:
部分,则外部世界看不到它,如果它位于public:
部分,则它是可见的,但是(当然)要命名它,可以使用outer\u class::internal\u class
。但是它仍然是一个完全独立的类——例如,您可以创建内部类的实例,而不创建任何外部类的实例
<>编辑:对不起,我错过了你的问题。在C++中,内层类可以访问外部类的私有部分——本质上,它就像外部类已经声明了内部类作为它的朋友,所以私有名称是可见的,但是在我之前,你仍然需要传递它,就像对外部类的对象的引用。t可以调用外部类的任何非静态成员函数
虽然目前还不应该是这样,但我相信大多数编译器已经实现了这个特定部分。它是否有指向父级的指针:否。
它是否可以访问父母的私人成员:某种程度上 我认为标准I中没有很好地定义if-it-have-access,这可能是错误的。
但是你可以在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();
}
#包括
X类
{
Y类
{
公众:
Y(X*p)
:家长(p)
{}
void TryY()
{
//访问X的私有成员
++(父->值);
}
私人:
X*父母;
};
公众:
X()
:y(本)
{
数值=4;
}
void TryY()
{
y、 TryY();
std::难道这在C++0x中似乎正在改变。C++03说:“嵌套类的成员对封闭类的成员没有特殊访问权。”C++0x FCD说:“嵌套类是成员,因此与任何其他成员具有相同的访问权。”(两者都是§11.8/1)。(这一改变是由CWG缺陷45和494引入的:和)很好-这消除了编写友元类{
的冲动,这是一些编译器支持的,但并不明显地使嵌套类根本不是成员!@Potato:有趣的是,即使是严格C++03模式下的Comeau也不遵循C++03语言。这让我相信(a)出于某种原因,很可能不可能遵循C++03语言(尽管除了上面链接的DRs中提到的内容之外,我还没有弄清楚确切的原因),并且(b)很可能没有人真正遵循C++03语言:-)。@James:我认为GCC 3.x遵循了这条规则,但我不确定是哪个版本,而且我还没有副本。