与公共,私人和受保护的区别

Difference with Public, private and protected

本文关键字:受保护 区别      更新时间:2023-10-16

我正在解决一些基本的继承问题。我遇到了一些我不明白逻辑_that的事情。 如果我从基类继承派生类作为私有,我甚至可以访问基类的公共成员吗?这是我的代码,

#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; 
}

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