【问题标题】:C++ inheritance private membersC++ 继承私有成员
【发布时间】:2020-09-01 02:29:45
【问题描述】:

我有一个关于继承的问题:

例如,我有一个带有私有成员的基类 A:x, y

我有 getter 函数 getx 和 gety, 我想使用从 A 到继承自 A 的类 B 的 getter 函数,

但我的问题是 x 和 y 是 A 的私有成员 我无法从 B 访问 A 的私有信息。

所以我需要为 B 类创建两个 x,y 但这样我将无法使用 A 类的 get 函数。

有什么帮助吗?我不知道如何在不创建新成员的情况下访问 A 的私有成员。也许与构造函数?但我不确定如何。

【问题讨论】:

  • 不能从派生类访问私有成员。请改用受保护的成员。将它们视为私有的,除了继承,而公共成员对每个类都是可访问的。
  • 更好地显示代码而不是用英文描述代码。细节很重要,为了给你指明正确的方向,看看A和B到底是什么会很好
  • 为什么要访问不同类的私有成员?它们不应该从外部访问,这就是它们是私有的原因
  • 那么我可以对我的函数做些什么呢?因为如果我不能使用 A 的 get 函数,我将不得不在 B 中创建新函数,所以我不需要继承
  • 如果函数是公开的,您可以调用它们,但请发帖minimal reproducible example

标签: c++ inheritance private


【解决方案1】:

C++ 提供了您可能想要使用的受保护机制。看看here。

您可以使 A 类的成员 x 和 y 受保护,以便从 A 继承的 B 类可以访问它们。

class A{
protected:
int x;
int y;
};

class B : public A{

public:
 void somefn(int someval){
   x = someval; //A::x is being set here.
}
};

【讨论】:

    【解决方案2】:

    私有成员始终是私有的。不惜任何代价都不能从外部课程中访问它们。你可以试试protected,考虑以下几点:

    #include <iostream>
    
    // Base class
    class A {
        protected: // declaration for protected vars which are clearly accessible to B
            int x;
            int y;
        public:
            void setX(int w) { x = w; }
            void setY(int h) { y = h; }
    };
    
    // Derived class
    class B: public A { // derives A
        public:
        int multiply() { 
            return (x * y); // accesses x and y from class A
        }
    };
    

    x 和 y 从 A 类访问到派生类 B。

    就是这样。

    【讨论】:

      猜你喜欢
      • 2011-02-10
      • 2020-09-04
      • 2018-05-11
      • 2011-02-26
      • 2023-03-03
      • 2013-02-12
      • 2015-01-21
      • 2011-09-26
      • 2013-08-30
      相关资源
      最近更新 更多