与公共,私人和受保护的差异

时间:2017-07-14 11:06:16

标签: c++ inheritance

我正在解决一些基本的继承问题。我遇到了一些我不理解逻辑的东西。如果我将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; 
}

1 个答案:

答案 0 :(得分:0)

不,您不应该能够访问作为私有继承的基类的公共成员,否则私有继承的目的将毫无意义。您甚至不能将Box*类型的指针分配给Shape*类型的变量。如果您的编译器处理代码并且二进制打印&#34; SHAPE&#34;而不是&#34; BOX&#34;你的编译器确实坏了。