我有一个从类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_foom_bar(在b中)的值分别更改为10和30。
因此,我应该打印“ 10; 30”而不是“ 0; 1”。

非常感谢您的帮助,

最佳答案

您不能使用构造函数来更改对象,而只能构造它。要更改已经构造的对象,您需要使用它的publicprotected(如果是派生的class)成员。在您的示例中,A需要实现一个reset()成员函数,该成员函数以后可用于重置其状态。

09-04 07:36
查看更多