0025182: Standard_OVERRIDE - add alias for C++11 "override" specifier
authorkgv <kgv@opencascade.com>
Thu, 28 Aug 2014 10:05:21 +0000 (14:05 +0400)
committerbugmaster <bugmaster@opencascade.com>
Thu, 4 Sep 2014 09:46:42 +0000 (13:46 +0400)
dox/dev_guides/contribution/coding_rules.md
src/AIS/AIS_ColoredShape.hxx
src/Standard/Standard_Macro.hxx

index d757d1a..d17dee1 100644 (file)
@@ -556,6 +556,41 @@ If a class has a destructor, an assignment operator or a copy constructor, it us
 
 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.
index 0fedcf8..f116bab 100644 (file)
@@ -92,19 +92,19 @@ public: //! @name sub-shape aspects
 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:
 
index 330a2bd..cc5d726 100644 (file)
 # 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
 //======================================================
@@ -36,7 +46,7 @@
 #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