我有一个从类A继承的C ++类B。我可能错过了OOP的一个重要概念,这当然很简单,但是我不明白在实例化B之后如何在B内部使用A的构造函数来重新分配仅从A继承的局部变量的新值:
A级
class A{
public:
A(int a, int b){
m_foo = a;
m_bar = b;
}
protected:
int m_foo;
int m_bar;
};
B级
class B : public A{
public:
B(int a, int b, int c):A(a,b),m_loc(c){};
void resetParent(){
/* Can I use the constructor of A to change m_foo and
* m_bar without explicitly reassigning value? */
A(10,30); // Obviously, this does not work :)
std::cout<<m_foo<<"; "<<m_bar<<std::endl;
}
private:
int m_loc;
};
主要
int main(){
B b(0,1,3);
b.resetParent();
return 1;
}
在此特定示例中,我想调用
b.resetParent()
,该调用应调用A::A()
将m_foo
和m_bar
(在b
中)的值分别更改为10和30。因此,我应该打印“ 10; 30”而不是“ 0; 1”。
非常感谢您的帮助,
最佳答案
您不能使用构造函数来更改对象,而只能构造它。要更改已经构造的对象,您需要使用它的public
和protected
(如果是派生的class
)成员。在您的示例中,A
需要实现一个reset()
成员函数,该成员函数以后可用于重置其状态。