在子类中使用父类的对象。您是否需要将对象作为类构造函数传递?

时间:2019-02-20 11:29:52

标签: c++ inheritance polymorphism

这可能是一个重复的问题,但我一直无法找到解决此问题的最佳方法。

我有一个父类,它创建一个对象,该对象具有在该对象上运行的有用方法。然后,我想创建一个子类,该子类通过引用获取父类的对象,并具有对其进行操作的其他方法。

我想知道如何最好地做到这一点?我应该传递一个指向父类对象的指针作为子类的构造函数吗?

我想做什么:

class obj_parent{
    initializes object
    virtual void method_1
    virtual void method_2
}

class operation: public obj_parent {
    void opertation_method_1(*object)
    void opertation_method_2(object)
}

如果对父类和子类进行模板化,还会有什么区别?

关于该主题的一些参考文献并未完全回答我的问题,但可能很有用。 Pass an object to a class constructor Passing object of a template class to constructor of another class

1 个答案:

答案 0 :(得分:1)

好,因此下面的示例完全可以完成您想做的事情:子对象通过引用修改父对象的实例。父级拥有一个int。是的,在现实生活中,一个对象通常会具有多个成员变量,但这只是一个示例。

class parentInt {
public:
    int memberNumber;
    parentInt(int number) {
        memberNumber = number;
    }
    parentInt() {
        memberNumber = 0;
    }
};

class childInt : public parentInt {
public:
    parentInt& mReferenceToParentObject;
    childInt(parentInt& referenceToParentObject) :mReferenceToParentObject(referenceToParentObject) {}
    void addOne() {
        mReferenceToParentObject.memberNumber++;
    }
    void subtractOne() {
        mReferenceToParentObject.memberNumber--;
    }
};


int main()
{
    parentInt p(5); //parent int is 5
    childInt c(p); //child int is a reference to parent
    c.addOne();  // parent's memberNumber is now 6 because the child modified the parent through the reference
    c.subtractOne();  // parent's memberNumber is now 5 because the child modified the parent through the reference
}

如果您这样做是为了求解方程组(原始问题中未提及,请参见评论),则将上面的memberNumber替换为代表2D矩阵的向量,然后将addOne更改为高斯消像算法方程组。