【发布时间】:2022-01-18 04:26:05
【问题描述】:
派生类可以在没有基类对象的情况下访问基类非静态成员
class base
{
public:
int data;
void f1()
{
}
};
class derived : base
{
public :
void f()
{
base::data = 44; // is this possible
cout << base::data << endl;
}
};
为什么下面的显示错误
class base
{
public:
int data;
void f1()
{
}
};
class derived : base
{
public :
static void f()
{
base::data = 44; // this one shows a error
cout << base::data << endl;
}
};
我在任何婚礼上都找不到答案
【问题讨论】:
-
data是一个 instance 成员变量。在第二个代码 sn-p 中,f是一个 static 成员函数。静态成员函数中没有活动实例。因此,没有data,因为没有实例。实例与静态成员之间的区别在任何 C++ 语言的补救文本中都有介绍。 -
如果没有该类的对象,您希望能够访问该类的非静态成员意味着什么?鉴于您了解非静态成员和静态成员之间的区别是什么,您为什么希望第二个版本能够正常工作?
-
base::data = 44;实际上是this->base::data = 44;(因为data不是static)。在static方法中作为f,你不能使用this。
标签: c++ derived-class base-class non-static