Использование объекта родительского класса в дочернем классе.Вам нужно передать объект как конструктор класса? - PullRequest
0 голосов
/ 20 февраля 2019

Вероятно, это повторяющийся вопрос, но я не смог найти лучший способ решения этой проблемы.

У меня есть родительский класс, который создает объект, у которого есть полезные методы, работающие с этим объектом.Затем я хочу создать дочерний класс, который берет объект родительского класса по ссылке и имеет кучу других методов, которые работают с ним.

Мне было интересно, как лучше к этому подойти?Должен ли я передать указатель на объект родительского класса в качестве конструктора дочернего класса?

Что я хотел бы сделать:

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

Кроме того, какая разница, еслиродительский класс и дочерний класс были шаблонными?

Некоторые ссылки на предмет, которые я не нашел, полностью ответили на мой вопрос, но могут быть полезны. Передача объекта в конструктор класса Передача объекта из шаблона в конструктор другого класса

1 Ответ

0 голосов
/ 20 февраля 2019

Хорошо, поэтому приведенный ниже пример делает именно то, что вы хотели: дочерний объект изменяет экземпляр родительского объекта посредством ссылки.Родитель содержит один 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 наАлгоритм, подобный устранению Гаусса, для решения системы уравнений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...