Lesson 3 | Types of operators that can be overloaded |
Objective | Identify the operators that can be overloaded. |
Types of Overloadable Operators in C++
Almost all operators can be overloaded, including:
- All the arithmetic, logical, comparison, equality, assignment, and bit operators. In addition, the autoincrement and autodecrement operators (
++
and --
) can have distinct prefix and postfix meanings.
- The subscript or index operator
[]
and the function call ()
.
- The class pointer operator (
->
) and the
member pointer selector operator (->*
).
- The operators
new
and delete
.
The assignment, function call, subscripting, and class pointer operators can be overloaded only by nonstatic member functions.
Exceptions
The following operators cannot be overloaded:
- the member operator (
.
)
- the member object selector operator (
.*
)
- the ternary conditional expression operator (
?:
)
- the
sizeof
operator
- the scope resolution operator (
::
)
Member Function Overloading
Let us assume we have decided to standardize and purchase our laptop computers from only one manufacturer. We could then introduce a new constructor with one less parameter for class Lap_Top.
Lap_Top(const std::string& proc, int ram, int disk,
double screen, double wei) :
Computer(DEFAULT_LT_MAN, proc, ram, disk), screen_size(screen),
weight(wei) {}
We now have two constructors with different signatures in class Lap_Top. Having multiple member functions with the same name but different signatures in a class is called member function overloading.
Calling Base-Class Functions
Form:
base-class::function-name()
base-class::function-name(argument-list)
Example:
Computer::to_string()
Meaning: Using the prefix base-class:: in a call to function function-name calls the function with that name defined in the base class of the current class. Now we have two ways to create new Lap_Top objects. Both of the following statements are valid:
Lap_Top ltp1("Intel P4 2.8", 256, 40, 14, 6.5);
Lap_Top ltp2("MicroSys", "AMD Athlon 2000", 256, 40, 15, 7.5);
Because the manufacturer string is not specified for ltp1, its manufacturer is DEFAULT_LT_MAN.
Operator Overloading - Quiz