可以在派生类中修改私有基类成员变量吗?

时间:2016-05-03 02:34:46

标签: c++ inheritance

有没有办法将基类的私有成员变量设置为派生类的构造函数中的值?

我理解getter和setter方法的用途以及变量保护或公共的用途是什么,但假设您无法修改基类,是否有其他方法可以设置它?

4 个答案:

答案 0 :(得分:5)

没有。这是私人的。这就是private的全部内容。

根据注释中的说明 - 基类确实为您提供了一种通过其构造函数实现的方法,因此您可以使用它。

// Assuming MyBaseclass has a 1 int constructor to set the
// private member, then something like this works.
//
MySubclass(int x) : MyBaseclass(x) {}

答案 1 :(得分:0)

  

我理解getter和setter方法的用途以及变量受保护或公开的原因是什么,但假设您无法修改基类,是否有其他方法可以设置它?

不确定。替代方法而不是在派生类构造函数体中使用setter函数,是使用派生类中的适当构造函数来调用基类的初始化构造函数(正如您在comment中所说的那样): / p>

class Base {
public:
    Base(int x, int y) : x_(x), y_(y) {}
private:
    int x_;
    int y_;
};

class Derived : public Base {
public:
    Derived() : Base(15,42) {}
           // ^^^^^^^^^^^^^
}:

查看有关member initializer list的详细信息。

答案 2 :(得分:0)

是的,我们可以通过从基类中调用getter函数来实现。这是一个示例:

#include<iostream>
using namespace std;

class A{
    int x;
public:
    void setx(int x1) {
        x = x1;
    }

    int getx() {
        return x;
    }

};

class B: public A {

};

int main() {
    B b;
    b.setx(1000);
    cout << b.getx();
    return 0;
} 

答案 3 :(得分:-1)

不,你不能。但是,您可以将派生类设为基类的friend(在这种情况下不是一个好主意)或使private成员成为protected成员< / strong>(只能从基类和派生类访问)。

我建议在这种情况下使用第二个建议,以避免将每个private成员提供给派生类。但是,通常,您应该通过其接口访问基类,但这实际上取决于您的设计。

编辑:如果它在构造函数中,您应该采取不同的方式。请参阅其他答案。