Notiunea de obiect apare in multe contexte: OOPLs (Object-Oriented Programming Languages), OODBs (Object-Oriented Databases), OOA (object-oriented analysis), sau OOD (object-oriented design). In modulele de C++ vom explora intr-o maniera practica programarea orientata pe obiecte. In deceniul 9, s-a inregistrat o adevarata explozie a tehnologiei OO odata cu aparitia limbajului Smalltalk. Programarea OO - Object-Oriented Programming (OOP) - a inceput sa o inlocuiasca pe cea traditionala, structurata. Paradigma OO nu este insa atat de noua, multe idei din OOP fiind luate de la Simula-67, limbaj dezvoltat in jurul anului 1967. Au aparut multe limbaje OO: Object-Pascal, Modula-2, Mesa, Cedar, Neon, Objective-C, Common List Object System (CLOS), sau C++. Exista limbaje concepute strict pe baza conceptelor programarii orientate pe obiecte (POO), de exemplu Simula sau Smalltalk. O alta abordare este de a adauga unor limbaje cu o popularitate bine stabilita, de exemplu Pascal si C, elementele tehnicii POO - rezultand Object-Pascal, respectiv C++. In 1980, la Laboratoarele Bell, Bjarne Stroustrup a dezvoltat C cu clase, numit in 1983 C++. Creatorul lui afima: "caracteristicile de orientare pe obiecte din C++ permit programelor sa fie structurate pentru a fi clare, extensibile si usor de intretinut, fara pierderea eficientei". De la aparitie, C++ a trecut prin trei mari revizuiri: in 1985, 1989, iar a treia cand a inceput lucrul la standardul ANSI pentru C++; prima versiune a standardului a fost creata in ianuarie 1994, cea considerata finala fiind din 1998. C++ combina avantajele oferite de limbajul C( eficienta, flexibilitate si popularitate) cu avantajele oferite de tehnica POO. Desi adopta principiile POO, C++ nu impune aplicarea lor stricta ( se pot scrie programe fara elemente POO ). Conceptul fundamental în C++ este clasa. Clasele:
Fisierele sursa C++ vor avea extensia .cpp. Comentariile sunt considerate textul pana la sfarsitul liniei care urmeaza perechii //. Intr-o instructiune bloc, inclusiv corp de functie, declaratiile de variabile nu trebuie neaparat sa preceada prelucrarile, ci pot fi facute intercalat. Exemplu: {
Daca o functie nu are parametri, la definirea ei nu trebuie sa apara void intre paranteze: void
main(){
În C++ exista doua posibilitati de transmitere a parametrilor actuali catre o functie:
Prin folosirea parametrilor formali referinta se permite realizarea transferului prin referinta ( transmiterea adresei ) de o maniera similara celei din Pascal ( parametrii VAR ). Se elimina astfel necesitatea recurgerii la artificiul din C, adica utilizarea parametrilor formali pointeri, în cazul în care modificarile facute în interiorul functiei asupra parametrilor trebuie sa ramâna si dupa revenirea din procedura. Exemplu:
C++ ofera
posibilitatea declararii functiilor cu valori implicite ale parametrilor.
La apelarea unei astfel de functii se poate omite specificarea parametrilor
efectivi pentru acei parametri formali care au declarate valori implicite
si se transfera automat valorile respective. Se pot specifica mai multe
argumente cu valori implicite pentru o functie. Este obligatoriu
ca numai ultimele argumente sa aiba astfel de valori si nu este permisa
alternarea argumentelor cu si fara valori implicite.
|
| void fct(int, int=10);
void tipareste(int i){ printf("%d ",i); } void fct(int p1, int p2){
void main(){
|
Exemplu:
| #define
max (x, y) ((x)>(y)?(x):(y)) //varianta
C
inline
int max (int x, int y){ //varianta
C++
|
Exemplu:
| void fct(int a) {
cout << "functia 1" << a; } void fct(char *a) {
|
Operatorul new poate fi folosit în urmatoarele situatii:
Exemplu:
| int * ip1, *ip2, *ip3;
ip1=new int; // variabila întreaga neinitializata ip2=new int(2); // variabila întreaga initializata cu 2 ip3=new int[100]; // tablou de 100 de întregi |
Operatorul delete este complementarul lui new si înlocuieste functia free() de dezalocare a memoriei dinamice alocate. Daca exista un destructor pentru obiectul care se dezaloca, acest destructor va fi apelat automat de catre delete.
Exemplu:
| int n=1;
void main() { int n=2; afiseaza(n); // afiseaza 2, valoarea variabilei locale n afiseaza(::n); // afiseaza 1,valoarea variabilei globale n } |
|
|
void
prel(int & a, int * b, int c ){
++a;++(*b);++c;
}
void
main(){
int x,y,z;
x=y=z=5;
prel(x,&y,z);
printf("%d %d %d\n",x,y,z);
getchar();
}
2.Ce se tipareste pe ecran la executia secventei:
void
salut(char* s="Buna dimineata!"){
puts(s);
}
void
main(){
salut();
salut("La revedere!");
getchar();
}
3.Rulati
programul de mai jos si identificati aspectele teoretice prezentate anterior:
| #include
<stdio.h>
#include <string.h> void
tip(int i, char *s){
int *px=new int(12); void
main(){
|