NS_OVERRIDE
is a macro which allows C++ code in Mozilla to specify that a method is intended to override a base class method. If there is no base class method with the same signature, a compiler with static-checking enabled will fail to compile.
NS_OVERRIDE
is declared in nscore.h, beginning with Gecko 2.0. It was introduced in bug 500870.
Class A has a method GetFoo()
which is overridden by class B:
class A { virtual nsresult GetFoo(nsIFoo** aResult); }; class B : public A { NS_OVERRIDE virtual nsresult GetFoo(nsIFoo** aResult); };
Later, the signature of A::GetFoo()
is changed to remove the output parameter:
class A { - virtual nsresult GetFoo(nsIFoo** aResult); + virtual already_AddRefed<nsIFoo> GetFoo(); };
B::GetFoo()
no longer overrides A::GetFoo()
as was originally intended. A compiler with static-checking enabled will issue the following error:
test.cpp:8: error: NS_OVERRIDE function B::GetFoo(nsIFoo**) does not override a base class method with the same name and signature.