+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
/*
**********************************************************************
-* Copyright (c) 2004, International Business Machines
+* Copyright (c) 2004-2015, International Business Machines
* Corporation and others. All Rights Reserved.
**********************************************************************
* Author: Alan Liu
#include "unicode/utypes.h"
+/**
+ * \file
+ * \brief C++ API: MeasureUnit object.
+ */
+
#if !UCONFIG_NO_FORMATTING
#include "unicode/fmtable.h"
+#if U_SHOW_CPLUSPLUS_API
U_NAMESPACE_BEGIN
class MeasureUnit;
/**
* An amount of a specified unit, consisting of a number and a Unit.
* For example, a length measure consists of a number and a length
- * unit, such as feet or meters. This is an abstract class.
- * Subclasses specify a concrete Unit type.
+ * unit, such as feet or meters.
*
- * <p>Measure objects are parsed and formatted by subclasses of
- * MeasureFormat.
+ * <p>Measure objects are formatted by MeasureFormat.
*
* <p>Measure objects are immutable.
*
- * <p>This is an abstract class.
- *
* @author Alan Liu
- * @draft ICU 3.0
+ * @stable ICU 3.0
*/
class U_I18N_API Measure: public UObject {
public:
* @param adoptedUnit the unit object, which must not be NULL
* @param ec input-output error code. If the amount or the unit
* is invalid, then this will be set to a failing value.
- * @draft ICU 3.0
+ * @stable ICU 3.0
*/
Measure(const Formattable& number, MeasureUnit* adoptedUnit,
UErrorCode& ec);
/**
* Copy constructor
- * @draft ICU 3.0
+ * @stable ICU 3.0
*/
Measure(const Measure& other);
/**
* Assignment operator
- * @draft ICU 3.0
+ * @stable ICU 3.0
*/
Measure& operator=(const Measure& other);
/**
* Return a polymorphic clone of this object. The result will
* have the same class as returned by getDynamicClassID().
- * @draft ICU 3.0
+ * @stable ICU 3.0
*/
- virtual UObject* clone() const = 0;
+ virtual UObject* clone() const;
/**
* Destructor
- * @draft ICU 3.0
+ * @stable ICU 3.0
*/
virtual ~Measure();
/**
* Equality operator. Return true if this object is equal
* to the given object.
- * @draft ICU 3.0
+ * @stable ICU 3.0
*/
UBool operator==(const UObject& other) const;
* Return a reference to the numeric value of this object. The
* numeric value may be of any numeric type supported by
* Formattable.
- * @draft ICU 3.0
+ * @stable ICU 3.0
*/
inline const Formattable& getNumber() const;
/**
* Return a reference to the unit of this object.
- * @draft ICU 3.0
+ * @stable ICU 3.0
*/
inline const MeasureUnit& getUnit() const;
+ /**
+ * Return the class ID for this class. This is useful only for comparing to
+ * a return value from getDynamicClassID(). For example:
+ * <pre>
+ * . Base* polymorphic_pointer = createPolymorphicObject();
+ * . if (polymorphic_pointer->getDynamicClassID() ==
+ * . erived::getStaticClassID()) ...
+ * </pre>
+ * @return The class ID for all objects of this class.
+ * @stable ICU 53
+ */
+ static UClassID U_EXPORT2 getStaticClassID(void);
+
+ /**
+ * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. This
+ * method is to implement a simple version of RTTI, since not all C++
+ * compilers support genuine RTTI. Polymorphic operator==() and clone()
+ * methods call this method.
+ *
+ * @return The class ID for this object. All objects of a
+ * given class have the same class ID. Objects of
+ * other classes have different class IDs.
+ * @stable ICU 53
+ */
+ virtual UClassID getDynamicClassID(void) const;
+
protected:
/**
* Default constructor.
- * @draft ICU 3.0
+ * @stable ICU 3.0
*/
Measure();
}
U_NAMESPACE_END
+#endif // U_SHOW_CPLUSPLUS_API
#endif // !UCONFIG_NO_FORMATTING
#endif // __MEASURE_H__