C and C++


LANG.TYPE.ONVM : Override of Non-Virtual Method

Summary

A method in a base class is not declared virtual, but it is overridden in a derived class.

Properties

Class Name Override of Non-Virtual Method
Significance style
Mnemonic LANG.TYPE.ONVM
Categories
AUTOSARC++14 AUTOSARC++14:A10-2-1 Non-virtual public or protected member functions shall not be redefined in derived classes.
MisraC++2023 MisraC++2023:6.4.2 Derived classes shall not conceal functions that are inherited from their bases
CWE CWE:1076 Insufficient Adherence to Expected Conventions
JSF++ JSF++:94 An inherited nonvirtual function shall not be redefined in a derived class.
Availability Available for C++ only (not C).
Enabling Checks for this warning class are disabled by default, and require the unnormalized C ASTs for the project. To enable them, add the following WARNING_FILTER rule and RETAIN_UNNORMALIZED_C_AST specification to the project configuration file.
RETAIN_UNNORMALIZED_C_AST = Yes
WARNING_FILTER += allow class="Override of Non-Virtual Method"
Note that retaining the unnormalized ASTs will increase the disk space used to store the project representation, and may make the analysis take longer.

Example

class Base {
  public:
    void nonv_fn_A(void);
    void nonv_fn_B(void);
    virtual void virtual_fn(void);
};

class Derived : public Base {
  public:
    void nonv_fn_A(void);      /* 'Override of Non-Virtual Method' warning issued here */
    void nonv_fn_B(int);              /* ok: does not override nonv_fn_B(void) */
    void virtual_fn(void);            /* ok: virtual_fn(void) declared  virtual in Base */
    void only_in_derived(void);       /* ok: only_in_derived() not in Base */
};

Relevant Configuration File Parameters

The following configuration file parameters affect checks for this warning class.