2013-07-12 2 views
-1

У меня есть базовый класс сКак создать добавление нового класса

  1. публичных виртуальных функций
  2. частные статические переменные и частные нестатические переменные
  3. частные функции-члены невиртуальные

Теперь мне нужно определить производный класс от этого базового класса, как показано ниже:

  1. Переопределить общедоступные виртуальные функции базового класса в производном классе.

  2. Повторно использовать частные статические переменные и частные нестатические переменные базового класса без переопределения его в производном классе.

  3. Повторно использовать частные не виртуальные функции-члены базового класса в производном классе без переопределения его в производном классе.

Как спроектировать эту проблему?

+1

Не можете ли вы защитить личные вещи? – juanchopanza

+0

Хорошо! Я об этом подумал. Но это единственная возможность? Разве мы не можем ничего решить, не касаясь базового класса? –

+0

№. Базовый класс говорит, что данные являются частными, поэтому ни один другой класс не может получить к нему доступ без изменения базового класса. Возможные варианты: сделать защиту данных (хорошо), добавить защищенные методы доступа (лучше всего), сделать новый класс другом (yuck). Когда вы говорите «повторно использовать ... частные ... переменные», вы имеете в виду, что вам нужно получить к ним доступ? Если нет, изменений не требуется. – andy256

ответ

0

для вас я проектирования базового класса согласно вашей спецификации

class Base 
{ 
    public: 
    virtual void OverrideMe() = 0; 

    private: 
     static int staticVariable; // <- this will not usable for derived, 
            //you can make it protected 

     int nonStaticVariable; // <- this will not usable for derived, 
        // either make it protected or provide some Getter & Setter method 
     void privateFunct(); 
        // It will not visible for derived class, you can make it protected 
}; 

производный класс:

class Derived : public Base 
{ 
    public: 
    void OverrideMe() // Overriding pure virtual method 
    { 
     /* Code */ 
    } 
} 

защищены позволит вам сделать ваш член частной и для других, но открыты для производного class.So возможной базы класс может быть

class Base 
{ 
    public: 
    virtual void OverrideMe() = 0; 

    protected: 
     static int staticVariable; // <- this will usable for derived, 
     int nonStaticVariable; // <- this will usable for derived, 
     void privateFunct(); 
        // It will visible for derived you can use it without redefining 
}; 

int Base::staticVariable = 0; // Initializing Static variable