为了简化我的问题,我有这样的事情:
class Base {
private:
protected:
int a,b;
string c;
public:
[some functions here]
}
class Derived : public Base{
[some variables and functions]
friend void function();
}
void function(){
int d[a][b];
[stuff]
}
基本上,我的void函数需要访问基类的受保护类中的东西。我想保留受保护部分中定义的那些变量。无论如何还有功能,它可以被派到Derived类,能够访问a和b吗?
答案 0 :(得分:0)
您可以在Derived
中定义私有方法:Derived中的任何方法都可以访问Base的受保护成员。
函数是Derived的朋友,因此它可以在Derived中调用那些私有方法,Derived又访问Base的受保护成员。
编辑以回复以下评论
get_a()
成员方法和a
成员数据是其类的成员。这些成员的实例存在于其类的实例中。除了实例之外,它们不存在,因此要访问它们,您需要通过类的实例访问它们。
例如,像这样:
class Derived : public Base{
[some variables and functions]
friend void function(Derived& derived);
};
void function(Derived& derived)
{
int a = derived.get_a();
int b = derived.get_b();
// I don't know but even the following might work
int c = derived.a; // able to access field of friend's base class.
}
void test()
{
Derived* derived = new Derived();
function(*derived);
delete derived;
}
答案 1 :(得分:0)
您的函数需要通过类的实例访问a和b,如下所示
void function()
{
Derived objectDerived;
int d[objectDerived.a][objectDerived.b];
[stuff]
}