2015-01-16 2 views
0

У меня есть два класса:Добавить вещи методы обновления родительского класса

class Object { 
public: void Update(); 
}; 

class Cube : public Object { 
void Update(); 
}; 

хочет метод Update(), который делает все, что я скажу это, то делает все Обновление от родительского класса делает. Я могу это сделать ?

+1

Да, вы можете вызывать функции в родительских классах с помощью оператора scope '::'. –

+1

в вызове Cube's Update() 'Object :: Update();' – Axalo

ответ

4

Возможно, вы хотите немного изменить дизайн. Нечто подобное может сделать то, что вы хотите:

class Object { 
public: 
    void Update(
     // invoke method from derived 
     onUpdate(); 

     // do stuff in base 
    ); 

protected: 
    virtual void onUpdate() = 0; 
}; 

class Cube : public Object { 
    void onUpdate() { 
     // do stuff in derived 
    } 
}; 
+0

Что делает '= 0' в' virtual void onUpdate() = 0; 'do? – Manu

+0

делает функцию чистой виртуальной (google it) – Axalo

+0

Это означает, что метод «чистый виртуальный». Добавление чистых виртуальных методов в класс делает его абстрактным классом, то есть он не может быть создан. Посмотрите здесь, например: http://stackoverflow.com/questions/1306778/c-virtual-pure-virtual-explained – Chris

0

Вы можете просто написать Object::update() в функции обновления Cube, но это, как правило, считается плохой практикой, чтобы переопределить унаследованную невиртуальную функцию, поэтому я предлагаю вам также сделать update виртуальный

class Object { 
    public: 
    virtual void update(){ /* ... */ } 
}; 

class Cube : public Object { 
    public: 
    void update() override { 
     // ... 
     Object::update(); 
    } 
}; 
Смежные вопросы