首页 > 解决方案 > 在子类中使用父类的对象。您需要将对象作为类构造函数传递吗?

问题描述

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

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

我想知道如何最好地解决这个问题?我应该将指向父类对象的指针作为子类的构造函数传递吗?

我想做什么:

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)
}

另外,如果父类和子类被模板化会有什么区别?

我没有找到关于该主题的一些参考资料完全回答了我的问题,但可能很有用。 将对象传递给类构造函数 将模板类的对象传递给另一个类的构造函数

标签: c++inheritancepolymorphism

解决方案


好的,所以下面的示例正是您想要做的:子通过引用修改父对象的实例。父母持有一个单一的整数。是的,在现实生活中,一个对象通常会有多个成员变量,但这只是一个说明性示例。

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 更改为像高斯消除这样的算法来求解系统方程。


推荐阅读