C ++ Наследование, базовый класс и дочерний класс - PullRequest
0 голосов
/ 11 октября 2019

У меня есть базовый класс и дочерний класс, производный от него. В своем конструкторе базового класса я создаю объект дочернего класса. Я не получаю ошибок, но вижу, что дочерний класс не видит данные из базового класса. Использование переменных базового класса в дочернем классе не приводит к ошибкам, но данные пустые. Неправильно ли я создал объект дочернего класса в моем базовом классе?

Редактировать: Вот мой базовый класс (без функций-членов):

class Well
{
    public:
       vector<double> vOilProd;
        vector<double> vGasProd;
        vector<double> vNGLProd;
       double dCurrent_Oil_Cum;
       double dCurrent_Gas_Cum;
       double dPrior_Oil;
       double dPrior_Gas;
       string bsCurrent_Phase;
       string bsMajor_Phase;
       int iLife_Major_Phase;
       int iCum_Time;
       int iCount;
}

Вот мой производный класс Dataline:

class DataLine : public Well
{
    private:
        vector<double> vProd;
        vector<string> vWords;
        string bsSection;
        string bsExpression;
        string bsPhaseName;
        string bsKeyword;
        string bsRi;
        string bsRf;
        string bsUnits;
        string bsLimit1;
        string bsLimit2;
        string bsDe;
        string bsDeType;
        string bsLimitType;
        string bsSolve;

        int iDelay;
        int iTimeLimit;
        int iLifeInMonths;
        int iStartMonth;
        int iEndMonth;               
}

В моем конструкторе Well все строки заданы, никаких проблем. В конструкторе Well я делаю это:

   DataLine aLine(bsTemp1, bsTemp2);

В первой строке конструктора Dataline я проверяю строковые переменные из класса Well, но они пустые, а те, которые являются числами, заканчиваютсяместо.

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

1 Ответ

0 голосов
/ 11 октября 2019

У меня есть базовый класс и дочерний класс, производный от него. В своем конструкторе базового класса я создаю объект дочернего класса. Я не получаю ошибок, но вижу, что дочерний класс не видит данные из базового класса. Использование переменных базового класса в дочернем классе не приводит к ошибкам, но данные пустые.

Внутри вашего Well конструктора, объявляющего локальную переменную с именем aLine изтип DataLine создает совершенно отдельный объект в памяти , чем Well объект, который все еще создается. Вот почему переменные внутри объекта aLine не «видят» значения, которые вы ранее присвоили Well перед созданием aLine.

Неправильно ли я создал дочерний классобъект в моем базовом классе?

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

...