在 C++ 中,如何从指向驱动类的指针访问嵌套类的成员
In C++, how to access the members of a nested class from a pointer to the drived class
你能解释一下为什么我在尝试从派生类访问嵌套类的成员时收到错误吗:
class Base
{
public:
static int A;
class inside_Base {public: static int B;};
};
int Base::A = 1;
int Base::inside_Base::B = 2;
class Derived : public Base {};
那么在主要我有:
Base * p;
p = new Derived();
当我尝试打印 p->inside_Base::B 时,我收到以下错误:
error: 'Base::inside_Base' is not a base of 'Derived'
谢谢。
正如 @V.Kravchenko 所说,你不应该通过创建的对象使用静态成员。没有变量多态性,只有函数多态性。
通常你不需要通过Derived
来引用inside_Base
,因为你谎称Base::inside_Base
是Derived
的嵌套类。但如果你非常想要它,你可以typedef
它:
class Derived : public Base
{
public:
typedef Base::inside_Base inside_Base;
};
在这种情况下,您可以编写 Derived::inside_Base::B
,例如(在 MSVC 9.0 中检查)。但是,当然,它没有多态性,因为类是在编译时静态定义的。
p->A
是什么意思?为什么不p->inside_Base::B
?
p->A
相当于Base::A
。C++允许您将静态变量用作非静态变量的功能。不知道为什么需要它。
var->Class::member
表示您需要与var
实例相关的类Class
中的member
符号。需要解决可能与var
一起使用的不明确符号。例如:
class Base
{
public:
int x = {1};
};
class Derived
{
public:
int x = {2};
};
void main()
{
Derived var
std::cout << var.x << " " << var.Base::x;
}
出来会2 1
.在第二次调用中,我们希望准确获取Base
的成员。
因此,p->inside_Base::B
说你想要一个与变量相关的类inside_Base
B
p
。但inside_Base
不是p
的类,也不是派生类。你可以问:为什么编译器不扫描嵌套类?我认为这是因为没有人需要它。这将使编译复杂化,并且不会受益,因为它不会解决任何歧义。
相关文章:
- 通过指向指针数组的指针访问子类的属性
- 使用指针访问数组中的对象数据成员
- 无法通过指针访问对象的成员
- decltype:使用指针访问类的静态成员
- 是否可以使用指针访问变量以避免直接编辑变量?
- 为什么 C++ 地址中的矢量无法通过原始指针访问
- 使用指针访问数组元素时出现意外结果
- 使用指针访问数组的值
- C++继承从基类指针访问派生类中的非虚拟函数
- 如何使用指针访问成对向量的元素
- 为什么有些库提供无指针访问,而另一些库则不提供
- 如何通过引用或指针访问二维矢量
- 使用指针访问参数接收的结构中的元素时内存泄漏
- 我正在学习C++,我不能使用指针访问参考吗?(举个例子)
- 复制堆栈上的成员值或使用指针访问它?
- C++娜娜 如何从全局列表框*指针访问列表框内的索引 0 上的按钮?
- 通过此指针访问时的成员差异和自身的成员指针(简单的 QT 示例问题)
- 从指针访问 Kaguya Lua 状态
- 说明通过指针访问非静态类成员函数
- 有没有办法使用初始化到第一行的指针访问 2d 数组的第二行?