我具有以下结构,我想从D调用foo。这怎么可能?我收到了错误消息,我在下面的行中进行了评论。
class A
{
protected:
class B
{
public:
B(x)
{
//...
}
protected:
virtual void foo()
{
//...
}
};
};
class C : public A
{
protected:
class D : public A::B
{
public:
D(x) : B(x)
{
//empty
}
};
void bar()
{
D var = D(x);
var.foo(); //cant access protected member in class A::B
}
};
最佳答案
foo()是B的受保护成员函数,意味着foo()仅允许从其子类(子类)中调用。
bar()是C的成员函数,C是从A继承的。因此,C不是B的子类。
如果将bar放在D中就可以了,如下代码所示:
class A
{
protected:
class B
{
public:
B(int x)
{
//...
}
protected:
virtual void foo()
{
//...
}
};
};
class C : public A
{
protected:
class D : public A::B
{
public:
D(int x) : B(x)
{
//empty
}
// Here is OK, while D is subclass of B
void bar()
{
int x;
D var = D(x);
var.foo(); //cant access protected member in class A::B
}
};
// void bar()
// {
// int x;
// D var = D(x);
// var.foo(); //cant access protected member in class A::B
// }
};
int main(){
return 0;
}
关于c++ - C++类中的类方法继承,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33960473/