Created by: reyoung
给每一个Layer的子类添加了override关键词。这么做是为了方便下一步重构。使用override关键词可以在重构基类的函数,修改基类函数时,避免一些错误。
例如
class Base {
public:
virtual void init();
};
class Derived : public Base {
public:
virtual void init() {
// do something else.
}
};
这样写code的时候,如果修改基类的init函数签名,会导致Derived 类里面的init还是没有修改,导致了不符合预期的行为。
class Base {
public:
virtual void initEx();
};
class Derived : public Base {
public:
virtual void init() {
// do something else.
}
};
auto instance = new Derived();
instance->initEx(); // It will invoke Base::initEx, not Derived::init
而如果把子类的virtual在实现的时候,改成override,那么修改基类的init函数的时候,就会让编译直接报错。
修改前:
class Base {
public:
virtual void init();
};
class Derived : public Base {
public:
void init() override {
// do something else.
}
};
auto instance = new Derived();
instance->init(); // Derived::init()
修改后:
class Base {
public:
virtual void initEx();
};
class Derived : public Base {
public:
void init() override {
// do something else.
}
};
auto instance = new Derived();
instance->init(); // compile error. Because Derived::init override nothing.
这对于重构代码,非常有帮助。可以让编译器去检查代码的正确性。