[CPP] Casting and operator overloading
Casting
Casting away the const-ness
When we have a const value, normally we can’t change them, but using casting, we can cast the const value to remove the constness of a reference or pointer.WARNING: Do not actually do this unless there is a really good reason! Casting away const-ness is really bad.
C++11 new way to cast
Four new casts:
- cosnt_cast< newtype >(?)
- dynamic_cast < newtype >(?): safely cast a pointer or reference from base-class to sub-class
- static_cast< newtype >(?): cast between types, converting the type
- reinterpret_cast< newtype >(?)
Sometimes needed : dynamic_cast provides run-time type checking.
Note: Casting a pointer will not usually change the stored address value, only the type. This is NOT true with multiple inheritance.
static_cast
Commonly used cast, attempts to convert correctly between two types.The example is in the previous blog. You can use label [CPP] to find them.
dynamic_cast
- Casting from derived class to base class is easy, because derived class object is a base class object.
- But base class object might not be a derived class object.
- Using dynamic_cast, safely convert from a base-class pointer or reference to a sub-class pointer or reference
- Checks the type at run-time rather than compile time
- returns NULL if the type conversion of a pointer cannot take place.
- If reference conversion fails, it throws an exception of type std::bad_cast
reinterpret_cast< type >(var)
Usually this kind of cast is rarely used, and used on pointers(addresses)Operator overloading
In C++, operators are implemented as functions. By using function overloading on the operator functions, you can define your own versions of the operators that work with different data types (including classes that you’ve written). Using function overloading to overload operators is called operator overloading.- Function overloading: change the meaning of function according to the types of the parameters
- Operator overloading: change the meaning of operator according to the types of the parameters
What’s the difference between member function and non-member function?
Restriction
- You cannot change an operator’s precedence
- You cannot create new operators
- You cannot change number of parameters (operands)
- You cannot override some operators: :: sizeof ? : or . (dot)
评论
发表评论