gpt4 book ai didi

c++ - 我可以从派生类中的静态函数访问 protected 基类成员吗?

转载 作者:IT老高 更新时间:2023-10-28 21:57:58 34 4
gpt4 key购买 nike

我有一个程序,我需要在其中创建一个在 dll 和一些应用程序代码之间共享的基类。然后我有两个不同的派生类,一个在 dll 中,一个在主应用程序中。它们中的每一个都有一些静态成员函数,它们对 nase 类中的数据进行操作。 (它们需要是静态的,因为在其他地方用作函数指针)。我的问题最简单的形式如下所示。

class Base {
protected:
int var ;
};

class Derived : public Base {
static bool Process( Base *pBase ) {
pBase->var = 2;
return true;
}
};

我的编译器提示我无法访问 pBase 的 protected 成员,即使 Derived 具有对 Base 的 protected 访问。有什么办法可以解决这个问题还是我误解了什么?我可以将 Base 变量公开,但这会很糟糕,因为在我的实际实例中,这些是分配的内存块和用于保护它以进行多线程处理的信号量。

帮助?

最佳答案

一般来说(不管函数是否是静态的),一个派生类的成员函数只能访问 protected 基类其类型的对象的类成员。它无法访问 protected 如果静态类型不是派生类的,则为基类的成员(或从它派生的类)。所以:

class Base {
protected:
int var;
} ;

class Derived : public Base {
static void f1( Derived* pDerived )
{
pDerived->var = 2; // legal, access through Derived...
}
static bool Process( Base *pBase )
{
pBase->var = 2 ; // illegal, access not through Derived...
}
} ;

关于c++ - 我可以从派生类中的静态函数访问 protected 基类成员吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7307200/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com