gpt4 book ai didi

C++类中的类方法继承

转载 作者:行者123 更新时间:2023-11-28 05:57:04 25 4
gpt4 key购买 nike

我有以下结构,我想从 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的protected成员函数,意味着foo()只允许从它的子类(child class)中调用。

bar()是C的成员函数,C继承自A,所以C不是B的子类。

如果把bar放在D里就OK了,如下代码:

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++类中的类方法继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33960473/

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