c ++私有继承仍然可以访问公共/受保护的基本成员

时间:2018-12-03 22:59:41

标签: c++ inheritance

我有一种感觉,好像我在这里丢失了一些东西,但是下面的代码确实可以编译并运行在一些不同的平台上,包括Ubuntu 16.4和onlinegdb。但是我不明白为什么?根据{{​​3}},下面的TestFunc不应该编译,并且std::cout的两行都应该引发错误。

私有继承是否应该将所有基类成员的访问级别更改为子类的私有? SubPriv如何从x访问yBase

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

0 个答案:

没有答案