Лабораторялық жұмыс бойынша сұрақтар
Қандай функциялар достық деп аталады?
Достық класстар дегеніміз не?
Достық кластар қалай анықталады?
Достық функциялар қалай анықталады?
ЛАБОРАТОРИЯЛЫҚ ЖҰМЫС № 9-11
ПОЛИМОРФИЗМ. ОПЕРАТОРЛАРДЫ ҚАЙТА ЖҮКТЕУ.
Жұмыс мақсаты: Операторларды қайта жүктеу механизмімен таныстыру.
Қысқаша теориялық мәліметтер
Операторларды қайта жүктеу.
Операторларды қайта жүктеу С++-тегі стандартты типтерге жаңа типтер қосуға мүмкіндік береді. Операторларды қайта жүктеу достық функциялар сияқты хабарланады.
class ZZ {
public:
friend ZZ operator+(ZZa, ZZb);
friend ZZ operator-(ZZa, ZZb);
friend ZZ operator*(ZZa, ZZb);
friend ZZ operator/(ZZa, ZZb);
};
Функция аттары – operator/, operator*, operator-, operator+ operator кілттік сөзінен және оператор символынан тұрады.
Қайта жүктеуге болатын операторлар тізімі:
* / + – % ^ & :
- ! , = < > <= >=
++ — << >> == != && ||
*= /* %= ^= &= |= += -=
<<= >>= -> ->* [] () new delete
Программа 1. Достық функциялар көмегімен операторларды қайта жүктеу мысалы.
#include
#include
#include
class TStrOp {
private:
char val[12];
public:
TStrOp() { val[0]=0; }
TStrOp(const char* s);
long GetVal(void) { return atol(val);}
friend long operator+(TStrOp a, TStrOp b);
friend long operator-(TStrOp a, TStrOp b);
};
void main()
{
TStrOp a = "1234";
TStrOp b = "4321";
cout << endl << "value of a == " << a.GetVal();
cout << endl << "value of b == " << b.GetVal();
cout << endl << " a + b + 6 == " << ( a + b + 6 );
cout << endl << " a – b + 10 == " << ( a – b + 10 )
<< endl;
}
TStrOp::TStrOp(const char* s)
{
strncpy(val, s, 11);
val[11]=0;
}
long operator+(TStrOp a, TStrOp b)
{
return (atol(a.val) + atol(b.val));
}
long operator-(TStrOp a, TStrOp b)
{
return (atol(a.val) – atol(b.val));
}
class TStrOp {
private:
char val[12];
public:
TStrOp() { val[0]=0; }
TStrOp(const char* s);
long GetVal(void) { return atol(val);}
long operator+(TStrOp a, TStrOp b);
long operator-(TStrOp a, TStrOp b); };
long TStrOp::operator+(TStrOp b)
{ return (atol(val) + atol(b.val)); }
long TStrOp::operator-(TStrOp b)
{ return (atol(val) – atol(b.val)); }
Программа 2. Индекстеуді қайта жүктеу мысалы.
#include
class Psevdoarray {
private:
int val0;
int val1;
int val2;
int val3;
public:
Psevdoarray( int v0, int v1, int v2, int v3)
{ val0 = v0; val1 = v1; val2 = v2; val3 = v3;}
int GetInt(unsigned i);
int operator[] (unsigned i);
};
void main()
{
Psevdoarray pa(10, 20, 30,40);
for( int i=0; i<=3; i++)
cout << "pa[" << i << "] ==" << pa[i] << endl;
}
int Psevdoarray::GetInt(unsigned i)
{
switch (i) {
case 0: return val0;
case 1: return val1;
case 2: return val2;
case 3: return val3;
default: return val0;
}
}
int Psevdoarray::operator[](unsigned i)
{
return GetInt(i);
}
Достарыңызбен бөлісу: |