有没有办法将基类的私有成员变量设置为派生类的构造函数中的值?
我理解getter和setter方法的用途以及变量保护或公共的用途是什么,但假设您无法修改基类,是否有其他方法可以设置它?
答案 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
成员提供给派生类。但是,通常,您应该通过其接口访问基类,但这实际上取决于您的设计。
编辑:如果它在构造函数中,您应该采取不同的方式。请参阅其他答案。