可以派生 class 访问基 class 没有基 class 对象的非静态成员

can derived class access base class non-static members without object of the base class

可以派生 class 访问基 class 没有基 class

对象的非静态成员
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;
    }
};

我在任何网站都找不到答案

在你的第一个例子中

class derived : base 
{
    void f()
    {
        base::data = 44;
    }
};

f() 不是静态的。它适用于 derived 的对象,其中包括 base 的对象。因此,base::data = 44; 等同于 data = 44; 并且它访问对象的成员。

在第二个例子中

class derived : base 
{
    static void f()
    {
        base::data = 44;
    }
};

函数f()是静态的,所以它不能访问任何对象。在那里,base::data = 44; 可能意味着 base 的静态 data 成员。但是因为 data 是非静态的,表达式是错误的。