当将访问修饰符设置为私有或受保护时,为什么不能创建基类的指针并将其指向子类?
#include<iostream>
using namespace std;
class father
{
public:
int n=10;
};
class son:protected father
{
public:
son(){
cout<<n;
}
};
int main()
{
father *f;
f=new son;
}
最佳答案
班级本身及其子级可以访问班级的受保护成员。类似的逻辑适用于受保护的继承。也就是说,当您拥有受保护的继承时,只有类及其子级才“知道”这种继承。因此,使用您的代码(使用受保护的继承),您可以轻松地在son类中将son转换为父亲,如下所示。
class father
{
public:
int n = 10;
};
class son : protected father
{
void tmp(){father *f = new son;}
public:
son()
{
cout << n;
}
};
但是,要实现您希望实现的目标,您必须使用公共继承(以使其他人可以“意识到”这种继承的存在)。
#include <iostream>
using namespace std;
class father
{
public:
int n = 10;
};
class son : public father
{
public:
son()
{
cout << n;
}
};
int main()
{
father *f;
f = new son;
}
关于c++ - 错误:“父亲”是“儿子”不可访问的基础,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57400453/