我正在解决一些基本的继承问题。我遇到了一些我不理解逻辑的东西。如果我将Base类中的派生类继承为private,我是否可以访问Base类的公共成员。这是我的代码,
#include <iostream>
struct Shape
{
virtual void print()
{
std::cout << "SHAPE" << std::endl;
}
virtual ~Shape() {}
};
struct Box : private Shape
{
virtual void print()
{
std::cout << "BOX" << std::endl;
}
};
int main(int argc, char** argv)
{
Shape* s = new Box; //illformed ? can't access the public members of the base.
s->print();
delete s;
return 0;
}
答案 0 :(得分:0)
不,您不应该能够访问作为私有继承的基类的公共成员,否则私有继承的目的将毫无意义。您甚至不能将Box*
类型的指针分配给Shape*
类型的变量。如果您的编译器处理代码并且二进制打印&#34; SHAPE&#34;而不是&#34; BOX&#34;你的编译器确实坏了。