przeciazanie metod i operatorow, Programowanie obiektowe


Przeciążanie metod

Przykład

#include <iostream.h>

class osoba

{

char nazwa[20];

int liczba;

char znak;

public:

  1. wypisz (char*tekst, char znak, int liczba);

wypisz (int liczba, char*tekst);

  1. wypisz (char*tekst, int liczba);

};

osoba::wypisz (char*tekst ,char znak, int liczba)

{

cout <<" \n Imie i Nazwisko: "<<tekst<<"\n Plec:"<<" \t\t "<<znak<<endl;

cout<<" Nr albumu: "<<liczba<< endl;

}

osoba::wypisz (int liczba, char*tekst)

{

cout <<" Rok studiow: "<<" " <<liczba<<tekst<< endl;

}

osoba::wypisz (char*tekst, int liczba)

{

cout<<" Adres uczelni: "<<tekst <<" "<<liczba<<endl;

}

void main ( )

{

osoba dane;

  1. dane.wypisz ("Jan Nowak", 'M' , 12345 ); dane.wypisz (3, " LKZR");

dane.wypisz ("Sucharskiego" , 2);

}

Wynik wykonania 1:

Imie i Nazwisko: Radoslaw Kosakowski

Plec: M

Nr. Albumu: 25195

Rok studiow: 3 LKZR

Adres uczelni: Sucharskiego 2

1: w programie posługujemy się trzema funkcjami o identycznej nazwie. Widzimy deklaracje tych funkcji. Nazwa funkcji wypisz jest trzykrotnie przeciążona. Poszczególne funkcje różnią się typem i ilością argumentów.

2: zastrzeżenie o odmiennym typie argumentów dotyczy również kolejności. Mogą być dwie funkcje, które pracują na tym samym zestawie argumentów. W obu wpadkach chodzi o argumenty int oraz char, jednak ich inna kolejność sprawia, że funkcje są łatwo rozróżniane. Jest tylko jedna taka funkcja o nazwie wypisz, której pierwszy argument ma typ int, a drugi - char. Podobnie jest tylko jedna funkcja wypisz, której pierwszy argument jest typu char, a drugi - int.

3: wywołania funkcji wypisz. Kompilator przygląda się argumentom i stąd dobiera funkcje, do której one pasują.

Przeciążanie operatorów

Przykład

#include<iostream.h>

class zespolona // deklaracja klasy

{

double re, im;

public:

zespolona ( ) {re = 0; im = 0; }

zespolona (double r, double i): re(r), im(i) { }

// konstruktor

zespolona operator + (zespolona z);

zespolona operator * ( );

zespolona operator / (zespolona z);

/* deklaracje operatorów przeciążonych */

friend zespolona operator - (zespolona z1, zespolona z2);

friend ostream& operator << (ostream& wyjscie, zespolona z);

friend istream& operator >> (istream& wejscie, zespolona &z);

};

  1. zespolona zespolona::operator * ( )

{

return zespolona (re, -im);

}

zespolona zespolona::operator + (zespolona z)

{

return zespolona (re+z.re, im+z.im);

}

zespolona operator-(zespolona z1, zespolona z2)

{

return zespolona(z1.re-z2.re, z1.im-z2.im);

}

zespolona zespolona ::operator /(zespolona z)

{

return zespolona(re/z.re,im/z.im);

}

  1. ostream& operator <<(ostream& wyjscie, zespolona z)

{

return wyjscie <<'(' <<z.re<<",j"<<z.im<<')';

}

  1. istream& operator >>(istream& wejscie, zespolona &z)

{

cout<<"re: ";

wejscie>>z.re;

cout<<"im: ";

wejscie>>z.im;

return wejscie;

}

void main ( )

{

zespolona z, z1(12, 22), z2 (5.5, -6), z3;

cout<<"\t Mamy podane nastepujace liczby zespolone:"<<endl;

cout<<"\n z1= "<<z1<<endl;

cout<<" z2= "<<z2<<endl<<endl;

cout<<"\tPodaj nowa liczbe zespolona"<<endl;

cin>>z3;

cout<<"\n z3= "<<z3<<endl<<endl;

cout<<"\tWykonujemy operacje matematyczne"<<endl;

cout<<"\n z= z1+ z3" ;

z=z1+z3; cout<<"\t z= "<<z<<endl; // operator +

cout<<"\n z= z2- z1";

z=z2-z1; cout<<"\t z= "<<z<<endl; // operator -

cout<<" \n z= *z2";

z=*z2; cout<<"\t\t z= "<<z<<endl; // operator *

cout<<"\n z= (z2+ z3)- z1" ;

z=z2+z3-z1; cout<<" z= "<<z<<endl;

cout<<"\n z= z1/ z3" ; // operator /

z=z1/z3; cout<<"\t z= "<<z<<endl;

cout<<endl;

}

Przykład ten zawiera szereg operatorów jedno i dwuargumentowych, definicją klasy jest klasa zespolona, funkcje operatorowe zostały zdefiniowane jako składowe i funkcje zaprzyjaźnione tejże klasy.

1: definicje funkcji składowych klasy i funkcji zaprzyjaźnionych z klasą.

2: operator << przeciążony w klasie ostream umożliwia wysyłanie danych do standardowego urządzenia wyjściowego, którym jest najczęściej monitor ekranowy.

Wartością wyrażenia zawierającego operator << jest referencja obiektu reprezentujący strumień wyjściowy, w powyższym przykładzie jest to wyjscie.

Operator << został przeciążony dla wszystkich podstawowych typów danych: char, short, int, long, float, double, long double, char* i void.

Definicję takiego przeciążania zadaje się za pomocą funkcji zaprzyjaźnionej.

3: operator >> przeciążony w klasie istream umożliwia pobieranie danych z wejścia standardowego. Zastosowanie tego operatora do obiektu cin (reprezentującego wejście standardowe) powoduje pobranie z wejścia odpowiedniej liczby znaków, wykonanie konwersji i przypisanie zmiennej obliczonej wartości. Operator >> został przeciążony dla wszystkich podstawowych typów danych: char, short, int, long, float, double, long double oraz char*.

5



Wyszukiwarka

Podobne podstrony:
Biblia NLP Wydanie rozszerzone ponad 350 wzorcow metod i strategii programowania neurolingwistyczneg
Programowanie obiektowe(ćw) 1
Zadanie projekt przychodnia lekarska, Programowanie obiektowe
Programowanie obiektowe w PHP4 i PHP5 11 2005
Programowanie Obiektowe ZadTest Nieznany
Egzamin Programowanie Obiektowe Głowacki, Programowanie Obiektowe
Jezyk C Efektywne programowanie obiektowe cpefpo
Programowanie Obiektowe Ćwiczenia 5
Programowanie obiektowe(cw) 2 i Nieznany
programowanie obiektowe 05, c c++, c#
Intuicyjne podstawy programowania obiektowego0
Programowanie obiektowe, CPP program, 1
wyklad5.cpp, JAVA jest językiem programowania obiektowego
projekt01, wisisz, wydzial informatyki, studia zaoczne inzynierskie, programowanie obiektowe, projek
projekt06, wisisz, wydzial informatyki, studia zaoczne inzynierskie, programowanie obiektowe, projek
projekt07, wisisz, wydzial informatyki, studia zaoczne inzynierskie, programowanie obiektowe, projek

więcej podobnych podstron