Может ли производный класс иметь элемент данных в шаблоне проектирования абстрактной фабрики

Я новичок в C++, и у меня есть следующие сомнения. В абстрактном фабричном шаблоне производный класс может иметь свои собственные элементы данных. Например,

class AbstractBaseclass
{
    public:
       virtual void somemethod() = 0;
}

class derived1: public AbstractBaseclass
{
    public:
        void somemethod()
        {
           .......
        }
}

class derived2: public AbstractBaseclass
{
    public:
        int dataMember;      ------------------> Is this correct?
        void somemethod()
        {
           .......
        }
}

class factory
{
    public:
        static AbstractBaseclass *createObject(int type)
        {
             <code to create object based on the passed type>
        }
}

У меня есть много производных классов в моем случае. Просто предоставляю макет здесь. Мои сомнения здесь: возможно ли иметь один элемент данных в классе, производном2? и получить к нему доступ, как показано ниже

 factory *fObj = new factory();
 AbstractBaseclass *baseObj = fObj->createObject(2);
 baseObj.dataMember = 3;

person Scarlet    schedule 22.02.2020    source источник


Ответы (1)


Производный класс может иметь дополнительные члены в виде методов или переменных.

Что касается доступа к dataMember через указатель на ваш базовый класс - это не разрешено, поскольку переменная dataMember не входит в область действия вашего базового класса.

person Eric    schedule 22.02.2020