【问题标题】:Private Variable Inheritance私有变量继承
【发布时间】:2014-11-17 02:38:42
【问题描述】:

我对如何继承私有变量感到困惑,当我尝试在继承的类中使用它们时,我收到错误消息告诉我的变量是私有的。

一个简单的例子。

假设:

//dog.h
class dog
{
private:
    bool fluffy;
public:
    ...
};

让我们说:

//dog.cpp
#include "dog.h"
...

现在:

//shepard.h
#include "dog.h"
class shepard: public dog
{
private:
    ...
public:
    void groom();
};

还有:

//shepard.cpp
#include "shepard.h"
void shepard::groom()
{
    fluffy = false;
}

如果我尝试使用新郎功能,我会收到如下错误:

error: 'bool dog::fluffy' is private

我做错了什么? 可选:未来设计此解决方案的最佳方式是什么?

【问题讨论】:

  • 子类无法访问超类 private 变量 - 这就是它们的原因 private。你需要让他们protected 做你想做的事。不过,+1 表示从 dog 派生 shepherd。

标签: c++ variables inheritance private


【解决方案1】:

最重要的继承规则是:

除了同一类的成员之外,永远无法从任何地方访问类的私有成员。

进一步的私人继承:

基类的所有公共成员都成为派生类的私有成员 &
基类的所有受保护成员都成为派生类的私有成员

好读:
What are access specifiers? Should I inherit with private, protected or public?

【讨论】:

  • @WillyGoat:添加了我之前回答的链接,以便您了解访问说明符和继承。阅读后,您可以更好地理解它们并自行决定需要使用什么。
猜你喜欢
  • 2014-04-06
  • 2018-09-19
  • 2012-12-03
  • 2012-10-31
  • 2011-04-06
  • 2015-09-14
  • 2011-03-23
  • 2017-04-08
  • 2012-09-27
相关资源
最近更新 更多