Lab 13

background image

Laboratorium nr 13

Temat: Przeciążanie operatorów, funkcje i zmienne statyczne. Algorytm sortowania.

1. Koncepcja przeciążania operatorów w C++

W C++ można przeciążać istniejące operatory, to znaczy nadawać im nowe znaczenie dla operacji

wykonywanych częściowo lub w całości na obiektach typu klasa. Aby przeciążyć operator, np. „+”,
definiuje się funkcje o nazwie operator +, przy czym funkcje te muszą być funkcjami składowymi albo
zaprzyjaźnionymi z obiektami, na których działają. W C++ można przeciążać zarówno operatory
jednoargumentowe (np. ++) jak i dwuargumentowe (+). Należy przy tym ograniczyć się do przeciążania
istniejących operatorów, przy zachowaniu odpowiedniej liczby argumentów. Zwykle funkcja operatora
zwraca typ obiektu, na którym działa.

class klasa{

public:
klasa operator +();

}

Uwaga: do funkcji zaprzyjaźnionych nie jest przesyłany wskaźnik this, dlatego operatory te powinny
być zadeklarowane jako referencyjne. W takim przypadku przekazywany jest sam obiekt, a nie jego
kopia.

2. Funkcje i zmienne statyczne

Zmienne Static: dana składowa zadeklarowane w klasie jako static jest dzielone przez
wszystkie obiekty danej klasy. Istnieje nawet wtedy, kiedy nie istnieje żaden obiekt. Domyślną
wartością jest zero. Możliwa jest inicjalizacja jawna na zewnątrz klasy (nawet, jeżeli dana jest
prywatna) przy użyciu operatora zakresu:

private:

static int licznik;

Funkcje

Static

: jeżeli jakaś funkcja składowa ma działanie niezależne od obiektów swojej

klasy, można ją zadeklarować z atrybutem static. Funkcja taka może być następnie wywołana bez
wymieniania jakiegokolwiek obiektu, a jedynie poprzedzając jej nazwę nazwą klasy i operatorem
zakresu (::).

3. Algorytmy sortowania

Algorytm sortowania umożliwia uporządkowanie zbioru danych względem pewnych cech, np.

wartości każdego elementu:

liczby

słowa

Algorytmy sortowania dzieli się zazwyczaj na dwie grupy, tj. stabilne i niestabilne:

stabilne, np.:

bąbelkowe , tj.

porównywanie dwóch kolejnych elementów i zamiana ich kolejności

przez wstawianie

itp.

niestabilne, np.:

przez wybieranie

Shella

itp.

background image

main.cpp

#include "klasa.h"

int main() {

class lista *baza;

baza=new lista();

baza->dodaj("Krzys","Nowak","1");

baza->dodaj("Grzes","Nowak","2");

baza->dodaj("Filip","Nowak","3");

baza->dodaj("Adam","Nowak","4");

baza->dodaj("Jan","Nowak","5");

baza->wyswietl();

baza->sortuj();

baza->wyswietl();

return 0;

};

klasa.h

#include <iostream>

#include <string.h>

using namespace std;

// klasa rekord

class rekord {

private:

public:

char imie[10];

char nazwisko[25];

char telefon[10];

class rekord *nastepny;

rekord(char *i,char *n,char *t);

rekord();

};

//klasa lista

class lista : public rekord {

private:

class rekord *pierwszy;

public:

void wyswietl();

void dodaj(char *i,char *n,char *t);

void sortuj();

lista(char *i="Imie", char

*n="Nazwisko", char *t="Telefon");

};

klasa.cpp

#include "klasa.h"

rekord::rekord(char *i, char *n, char *t){

strcpy(imie,i);

strcpy(nazwisko,n);

strcpy(telefon,t);

nastepny=NULL;

};

rekord::rekord(){};

void lista::wyswietl(){

class rekord *obiekt=this->pierwszy;

while (obiekt!=NULL) {

cout<<obiekt->imie<<"\t";

cout<<obiekt->nazwisko<<"\t";

cout<<obiekt->telefon<<"\n";

obiekt=obiekt->nastepny;

};

};

void lista::dodaj(char *i,char *n,char *t){

class rekord *obiekt=this->pierwszy;

while (obiekt->nastepny!=NULL) {

obiekt=obiekt->nastepny;

};

obiekt->nastepny=new rekord;

strcpy(obiekt->nastepny->imie,i);

strcpy(obiekt->nastepny->nazwisko,n);

strcpy(obiekt->nastepny->telefon,t);

obiekt->nastepny->nastepny=NULL;

};

void lista::sortuj(){

class rekord *obiekt1,*obiekt2;

char *i, *n, *t;

obiekt1=this->pierwszy->nastepny;

while (obiekt1->nastepny!=NULL){

obiekt2=this->pierwszy->nastepny;

while (obiekt2->nastepny!=NULL) {

if(strcmp((char*)obiekt2->imie,(char*)

obiekt2->nastepny->imie)==1){

i=new char [strlen(obiekt2->imie)+1];

n=new char [strlen(obiekt2->nazwisko)+1];

t=new char [strlen(obiekt2->telefon)+1];

strcpy(i,obiekt2->imie);

strcpy(n,obiekt2->nazwisko);

strcpy(t,obiekt2->telefon);

strcpy(obiekt2->imie,obiekt2->nastepny->

imie);

strcpy(obiekt2->nazwisko,obiekt2->

nastepny->nazwisko);

strcpy(obiekt2->telefon,obiekt2->

nastepny->telefon);

strcpy(obiekt2->nastepny->imie,i);

strcpy(obiekt2->nastepny->nazwisko,n);

strcpy(obiekt2->nastepny->telefon,t);

};

obiekt2=obiekt2->nastepny;

};

obiekt1=obiekt1->nastepny;

};

};

lista::lista(char *i, char *n, char *t) :

rekord(i,n,t){

this->pierwszy=this;

};

4. Zadanie: Zmodyfikuj program bazy danych z poprzednich ćwiczeń tak, aby umożliwiał sortowanie
rekordów po dowolnie wybranym polu oraz w wybranej kolejności, tzn. rosnąco lub malejąco.


Wyszukiwarka

Podobne podstrony:
lab 13, Notatki, FIZYKA, SEMESTR II, laborki, lab
a, lab.13, Laborka 13
Lab 13 - rossi, Politechnika Śląska
lab 13, 9.2.1.10 Packet Tracer Configuring Standard ACLs Instructions
Lab 13 - Przewodzenie ciepła, laborka 13, Cel ?wiczenia
Lab 13 - Przewodzenie ciepła, skaly13
lab 13 8 1
Lab 13 id 257441 Nieznany
Lab 13 14 15 16 Multimedia Klasa 4 2011 2012 Lista4, Informatyka, Technikum, Grafika
LAB 13 SSANIE OPIS, sgsp, Hydromechanika, HYDROMECHANIKA 1
PW LAB 13
lab 13
LAB 13, TARASIUK
NS1 lab 8 3 13 en Configure Cisco IOS Firewall CBAC
Lab 13 - Przewodzenie ciepła, laborka 13, Imię i nazwisko
IE RS lab 13 solutions
fiz lab 13
lab 13 5 1 2

więcej podobnych podstron