MyTetra Share
Делитесь знаниями!
Перегрузка операторов
Время создания: 28.12.2016 18:47
Текстовые метки: cpp, c++, перегрузка
Раздел: Computer - Programming - C++

#include <iostream>

#include <string.h>


using namespace std;


class StringWork

{

private:

char str[256];//line of our class

public:

StringWork()//constructor

{

for(int i=0; i<256; ++i) str[i] = '\0';

}


void operator +(char*);//prototype for '+' operation overload

void getStr();//output method

};


void StringWork::operator +(char *s)

{

strcat(str, s);

}


void StringWork::getStr()

{

cout<< str << endl;

}


int main()

{

char *str1 = new char[strlen("Hello ")+1];

char *str2 = new char[strlen("My cruel ")+1];

char *str3 = new char[strlen("World!\n")+1];


//Initialization

strcpy(str1, "Hello ");

strcpy(str2, "My cruel ");

strcpy(str3, "World\n");


StringWork story;

story + str1;

story + str2;

story + str3;


story.getStr();


delete [] str1;

delete [] str2;

delete [] str3;


return 0;

}


void operator +(char*);

Тут мы объявили прототип метода класса в котором перегрузим наш оператор +.

Чтобы перегрузить оператор, необходимо использовать зарезервированное слово operator. Выглядит это так, словно мы определяем обычную функцию: void operator+ () {//код}

В теле этой функции мы размещаем код, который покажет компилятору, какие действия будет выполнять оператор + (или какой-либо другой оператор). Перегруженный оператор будет выполнять указанные  для него действия  только в пределах того класса, в котором он определен.


Перегрузить можно практически любой оператор, за исключением следующих:

.  точка (выбор элемента класса);  

* звездочка (определение или разыменование указателя);

::  двойное двоеточие (область видимости метода);  

?:  знак вопроса с двоеточием (тернарный оператор сравнения);

#  диез (символ препроцессора);  

##  двойной диез (символ препроцессора);  

sizeof оператор нахождения размера объекта в байтах;


 
MyTetra Share v.0.53
Яндекс индекс цитирования