我有一种感觉,好像我在这里丢失了一些东西,但是下面的代码确实可以编译并运行在一些不同的平台上,包括Ubuntu 16.4和onlinegdb。但是我不明白为什么?根据{{3}},下面的TestFunc不应该编译,并且std::cout
的两行都应该引发错误。
私有继承是否应该将所有基类成员的访问级别更改为子类的私有? SubPriv
如何从x
访问y
和Base
?
#include <stdio.h>
#include <iostream>
class Base {
public:
int x;
protected:
int y;
private:
int z;
};
class SubPriv : private Base {
public:
void TestFunc() {
std::cout << "x: " << x << std::endl;
std::cout << "y: " << y << std::endl;
//std::cout << "z: " << x << std::endl;
};
};
int main()
{
SubPriv spriv;
spriv.TestFunc();
return 0;
}