как вернуться к выпуску dev после выпуска в ответном родном приложении

В C ++ метод можно переопределить, если он был отмечен virtual. Вы можете думать о virtual как синониме «overridable».

Ключевое слово virtual должно появиться в базовом классе. Он также может появиться необязательно в подклассах в точке переопределения, но это не обязательно.

Если вы используете компилятор, который поддерживает C ++ 11 (и вы должны, если вы изучаете C ++) , Я рекомендую вам всегда использовать новое ключевое слово override, когда вы хотите переопределить:

class Base {
public:
    virtual void speak() {
        std::cout << "Base";
    }
};

class Derived : public Base {
public:
    void speak() override {  // <---
        std::cout << "Derived";
    }
};

Если этот метод не является переопределением, компилятор скажет вам об этом, указав ошибку.

Не всегда очевидно, что первое чтение проверяется, является ли метод переопределением. Например, правильная ковариантность возвращаемого типа:

class A {};
class B : public A {};

class Base {
public:
    virtual A* foo() {
        return nullptr;
    }
};

class Derived : public Base {
public:
    B* foo() override {
        return nullptr;
    }
};

Это может быть не очень полезно очень часто, но override дает понять, что кто-то должен ее прочитать.

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

class App {
public:
    App() {}
    virtual ~App() {}  // <---
    void run() {
        this->speak();
    }
    virtual void speak() {
        std::cout << "Base\n";
    };
};
0
задан Guille 13 July 2018 в 15:32
поделиться