A class with virtual function(s) ought to have a virtual destructor.
+### Overriding virtual methods
+
+Declaration of overriding method should contains specifiers "virtual" and "override"
+(using Standard_OVERRIDE alias for compatibility with old compilers).
+
+~~~~~{.cpp}
+class MyPackage_BaseClass
+{
+
+public:
+
+ Standard_EXPORT virtual Standard_Boolean Perform();
+
+};
+
+~~~~~{.cpp}
+class MyPackage_MyClass : public MyPackage_BaseClass
+{
+
+public:
+
+ Standard_EXPORT virtual Standard_Boolean Perform() Standard_OVERRIDE;
+
+};
+~~~~~
+
+This makes class definition more clear (virtual methods become highlighted).
+
+Declaration of interface using pure virtual functions protects against
+incomplete inheritance at first level, but does not help when method is overridden multiple times within nested inheritance
+or when method in base class is intended to be optional.
+
+And here "override" specifier introduces additional protection against situations when interface changes might be missed
+(class might contain old methods which will be never called).
+
### Default parameter value
Do not redefine a default parameter value in an inherited function.
public: //! @name global aspects
//! Setup color of entire shape.
- Standard_EXPORT virtual void SetColor (const Quantity_Color& theColor);
+ Standard_EXPORT virtual void SetColor (const Quantity_Color& theColor) Standard_OVERRIDE;
//! Setup line width of entire shape.
- Standard_EXPORT virtual void SetWidth (const Standard_Real theLineWidth);
+ Standard_EXPORT virtual void SetWidth (const Standard_Real theLineWidth) Standard_OVERRIDE;
//! Sets transparency value.
- Standard_EXPORT virtual void SetTransparency (const Standard_Real theValue);
+ Standard_EXPORT virtual void SetTransparency (const Standard_Real theValue) Standard_OVERRIDE;
protected: //! @name override presentation computation
Standard_EXPORT virtual void Compute (const Handle(PrsMgr_PresentationManager3d)& thePrsMgr,
const Handle(Prs3d_Presentation)& thePrs,
- const Standard_Integer theMode);
+ const Standard_Integer theMode) Standard_OVERRIDE;
protected:
# define Handle(ClassName) Handle_##ClassName
# define STANDARD_TYPE(aType) aType##_Type_()
+#if defined(__cplusplus) && (__cplusplus >= 201100L)
+ // part of C++11 standard
+ #define Standard_OVERRIDE override
+#elif defined(_MSC_VER) && (_MSC_VER >= 1700)
+ // MSVC extension since VS2005
+ #define Standard_OVERRIDE override
+#else
+ #define Standard_OVERRIDE
+#endif
+
//======================================================
// Windows-specific definitions
//======================================================
#error "Wrong compiler options has been detected. Add /DWNT option for proper compilation!!!!!"
#endif
-# if defined(WNT) && !defined(HAVE_NO_DLL)
+# if defined(_WIN32) && !defined(HAVE_NO_DLL)
# ifndef Standard_EXPORT
# define Standard_EXPORT __declspec( dllexport )
# ifndef __Standard_API
//# ifdef WNT
-# if !defined(WNT) || defined(__Standard_DLL) || defined(__FSD_DLL) || defined(__MMgt_DLL) || defined(__OSD_DLL) || defined(__Plugin_DLL) || defined(__Quantity_DLL) || defined(__Resource_DLL) || defined(__SortTools_DLL) || defined(__StdFail_DLL) || defined(__Storage_DLL) || defined(__TColStd_DLL) || defined(__TCollection_DLL) || defined(__TShort_DLL) || defined(__Units_DLL) || defined(__UnitsAPI_DLL) || defined(__Dico_DLL)
+# if !defined(_WIN32) || defined(__Standard_DLL) || defined(__FSD_DLL) || defined(__MMgt_DLL) || defined(__OSD_DLL) || defined(__Plugin_DLL) || defined(__Quantity_DLL) || defined(__Resource_DLL) || defined(__SortTools_DLL) || defined(__StdFail_DLL) || defined(__Storage_DLL) || defined(__TColStd_DLL) || defined(__TCollection_DLL) || defined(__TShort_DLL) || defined(__Units_DLL) || defined(__UnitsAPI_DLL) || defined(__Dico_DLL)
# define __Standard_API Standard_EXPORT
# define __Standard_APIEXTERN Standard_EXPORTEXTERN
# else