C++/Overload/Parenthesis

Материал из C\C++ эксперт
Перейти к: навигация, поиск

Demonstrate the function call operator.

<source lang="cpp">

  1. include <iostream>

using namespace std; class three_d {

 int x, y, z;

public:

 three_d() { x = y = z = 0; }
 three_d(int i, int j, int k) { x = i; y = j; z = k; }
 three_d operator()(three_d obj);
 three_d operator()(int a, int b, int c);
 friend ostream &operator<<(ostream &strm, three_d op);

}; three_d three_d::operator()(three_d obj) {

 three_d temp;
 temp.x = (x + obj.x) / 2;
 temp.y = (y + obj.y) / 2;
 temp.z = (z + obj.z) / 2;
 return temp;

} three_d three_d::operator()(int a, int b, int c) {

 three_d temp;
 temp.x = x + a;
 temp.y = y + b;
 temp.z = z + c;
 return temp;

} ostream &operator<<(ostream &strm, three_d op) {

 strm << op.x << ", " << op.y << ", " << op.z << endl;
 return strm;

} int main() {

 three_d objA(1, 2, 3), objB(10, 10, 10), objC;
 cout << "This is objA: " << objA;
 cout << "This is objB: " << objB;
 objC = objA(objB);
 cout << "objA(objB): " << objC;
 objC = objA(10, 20, 30);
 cout << "objA(10, 20, 30): " << objC;
 objC = objA(objB(100, 200, 300));
 cout << "objA(objB(100, 200, 300)): " << objC;
 return 0;

}


 </source>


Demo: Overload ().

<source lang="cpp">

  1. include <iostream>

using namespace std; class MyClass {

 int x, y, z; 

public:

 MyClass() { 
    x = y = z = 0; 
 }
 MyClass(int i, int j, int k) { 
    x = i; 
    y = j; 
    z = k;
 }
 MyClass operator()(int a, int b, int c);
 void show() ;

}; // Overload (). MyClass MyClass::operator()(int a, int b, int c) {

 MyClass temp;
 temp.x = x + a;
 temp.y = y + b;
 temp.z = z + c;
 return temp;

} void MyClass::show() {

 cout << x << ", ";
 cout << y << ", ";
 cout << z << endl;

} int main() {

 MyClass object1(1, 2, 3), object2;
 object2 = object1(10, 11, 12); // invoke operator()
 cout << "object1: ";
 object1.show();
 cout << "object2: ";
 object2.show();
 return 0;

}

 </source>


Overload [] to create a generic safe array type.

<source lang="cpp">

  1. include <iostream>
  2. include <cstdlib>

using namespace std; template <class T, int len> class safe_array {

 T ar[len];
 int length;

public:

 safe_array();
 T &operator[](int i);
 int getlen() { return length; }

}; template <class T, int len> safe_array<T, len>::safe_array() {

 for(int i=0; i < len; ++i) ar[i] = T();
 length = len;

} template <class T, int len> T &safe_array<T, len>::operator[](int i) {

 if(i < 0 || i > len-1) {
   cout << "\nIndex value of " << i << " is out-of-bounds.\n";
   exit(1);
 }
 return ar[i];

} class myclass { public:

 int x;
 myclass(int i) { x = i; };
 myclass() { x = -1; }

}; int main() {

 safe_array<int, 10> intArray;
 safe_array<double, 5> doubleArray;
 int i;
 for(i=0; i < intArray.getlen(); ++i) 
    cout << intArray[i] << endl;
 for(i=0; i < intArray.getlen(); ++i) 
    intArray[i] = i;
 for(i=0; i < intArray.getlen(); ++i) 
    cout << intArray[i] << endl;
 for(i=0; i < doubleArray.getlen(); ++i) 
    cout << doubleArray[i] << endl;
 for(i=0; i < doubleArray.getlen(); ++i) 
    doubleArray[i] = (double) i/3;
 for(i=0; i < doubleArray.getlen(); ++i) 
    cout << doubleArray[i] << endl;
 safe_array<myclass, 3> classArray; // myclass array of size 3
 cout << "Initial values in classArray: ";
 for(i = 0; i < classArray.getlen(); ++i) cout << classArray[i].x << " ";
 cout << endl;
 classArray[0].x = 9;
 classArray[1].x = 9;
 classArray[2].x = -9;
 cout << "New values for classArray: ";
 for(i = 0; i < classArray.getlen(); ++i) cout << classArray[i].x << " ";
 cout << endl;
 intArray[12] = 100;
 return 0;

}


 </source>


Using the Subscript Operator in Programming a Dynamic Array

<source lang="cpp">

  1. include <iostream>

using namespace std; class CMyArray { private:

   int* m_pnInternalArray;
  int m_nNumElements;

public:

  CMyArray (int nNumElements);
  ~CMyArray ();
   // a subscript operator
   int& operator [] (int nIndex);

}; int& CMyArray::operator [] (int nIndex) {

   return m_pnInternalArray [nIndex];

} CMyArray::CMyArray (int nNumElements) {

   m_pnInternalArray = new int [nNumElements];
  m_nNumElements = nNumElements;

} CMyArray::~CMyArray () {

  delete [] m_pnInternalArray;

} int main () {

   CMyArray mArray (5);
   mArray [0] = 25;
   mArray [1] = 20;
   mArray [2] = 15;
   mArray [3] = 10;
   mArray [4] = 5;
   for (int nIndex = 0; nIndex < 5; ++ nIndex)
       std::cout << mArray [nIndex] << " ";
   return 0;

}


 </source>