//////////////////////////////////////////////////////////////
// File: StandardFunctions.cpp
// Author: Scott Badman
// Location:
//
// Purpose: Summary of formats for common class functions
//////////////////////////////////////////////////////////////
#include "StandardFunctions.h"
// Typical definition of Default Constructor
MyClass::MyClass() {
// appropriate default initialization of all data members, such as: mValue = 0;
// no return value allowed
} // MyClass::MyClass
// Typical definition of Copy Constructor
MyClass::MyClass(const MyClass& original) {
// approtriate copy code, such as: mValue = original.mValue;
// no return value allowed
} // MyClass::MyClass
// Typical Destructor
MyClass::~MyClass() {
// usually does nothing unless pointers, files, or system resources are used
}
// Typical overloaded assignment operator.
MyClass&
MyClass::operator=(const MyClass& rightside) {
// appropriate assignment code, such as mValue = rightside.mValue;
return *this;
} // MyClass::operator=
// Typical definition of Conversion Constructors
MyClass::MyClass(int number) {
// appropriate conversion code, such as: mValue = number;
// no return value allowed
} // MyClass::MyClass
// Conversion Constructor from some other object
MyClass::MyClass(const OtherClass& other) {
// appropriate conversion code, such as: mValue = other.mValue;
// no return value allowed
} // MyClass::MyClass
// Typical insertion operator definition.
// Note that this is a global function. Normally this function is declared
// a friend function inside MyClass using the following declaration:
// friend ostream& operator<<(ostream&, const MyClass&);
ostream&
operator<<(ostream& streamout, const MyClass& myObject) {
// appropriate code such as: streamout << setw(n) << myObject.mValue;
return streamout;
} // MyClass::operator<<
// Typical extraction operator definition. Notice right parameter is not const
// Note that this is a global function. Normally this function is declared
// a friend function inside MyClass using the following declaration:
// friend istream& operator>>(istream&, const MyClass&);
istream&
operator>>(istream& streamin, MyClass& myObject) {
// appropriate code such as: streamin >> myObject.mValue;
return streamin;
} // MyClass::operator>>
// Typical overloading of a prefix unary member function, except unary minus
// Prefix -- is similar
MyClass
MyClass::operator++() {
// appropriate code that makes this object "increment by one"
return *this;
} // MyClass::operator++
// Special overloading of the postfix ++ operator
// Postfix -- is similar
MyClass
MyClass::operator++(int ignore) {
MyClass temp(*this); // use Copy Constructor to make a copy of this object
++(*this); // call prefix version to "increment" this object
return temp; // use Copy Constructor to return the object as it
// was before incrementing.
} // MyClass::operator++(int)
// Typical overloading of the unary minus operator
// Note that this function does not change the original object
MyClass
MyClass::operator-() {
MyClass temp(*this);
// appropriate code to negate the temporary such as: temp.mValue = -temp.mValue;
return temp; // return the temp, using the Copy Constructor.
} // Integer::operator-
// Typical overloading of the unary plus operator
// Note that this function does not change the original object
MyClass
MyClass::operator+() {
MyClass temp(*this);
// usually this operator does nothing, so no code goes here
return temp; // return the temp, using the Copy Constructor.
} // Integer::operator-
// Typical overloading of a global binary friend function.
// Normally these functions are defined in terms of the combination
// assignment operator, such as +=
// Note that this is a global function. Normally this function is declared
// a friend function inside MyClass using the following declaration:
// friend MyClass operator+(const MyClass&, const MyClass&);
// Similar definitions for -, *, /, %
MyClass
operator+(const MyClass& left, const MyClass& right) {
MyClass temp(left); // use Copy Constructor to create a local copy of left
temp += right; // use += operator below to perform the "addition"
return temp; // use Copy Constructor to copy temp to return location
} // operator+
// Typical overloading of a combination assignment member function
// Similar definitions for -=, *=, /=, %=
MyClass&
MyClass::operator+=(const MyClass& rightside) {
// appropriate code goes here to "add" the rightside of += to this object,
// such as: mValue += rightside.mValue;
return *this;
} // MyClass::operator+=
// Typical overloading of a binary friend logical function
// Does not have a corresponding combination assignment function.
// Similar definitions for >, >=, <=, ==, !=
// Also more rarely, similar definitions for && and !!
bool
operator<(const MyClass& left, const MyClass& right) {
bool result;
// appropriate code goes here, such as: result = left.mValue < right.mValue;
return result;
} // operator<
// Typical overloading of the unary not operator
bool
MyClass::operator!() {
bool result;
// appropriate code goes here that returns a logical result for this object,
// often depending on whether this object has been properly initialized.
return result;
} // MyClass::operator<
// Typical type cast operator to intrinsic type. No parameters or return type.
// Notice that even though there is no return type, the function must
// return a value whose type matches the operator. operator int() must
// return an int, operator float() must return a float, etc.
MyClass::operator int() {
return mValue; // where mValue is the correct type, int for this example.
}
int main() {
// test code would go here
return 0;
} // main