C++ POO Lab Lucrarea 1
Structura în C
Plecând de la limbajul C, ne amintim că acesta pune la dispoziție o serie de tipuri de date primitive, incluse în standardul limbajului. Ca exemple, avem: int, long, char, double, etc. În plus, există posibilitatea de a crea structuri compuse folosind cuvântul cheie struct. O structură în C este compusă din una sau mai multe variabile care pot fi ori de tip primitiv, ori alte structuri.
În continuare avem un exemplu de definiție a unor structuri în C.
struct string{
char* str;
unsigned length;
};
struct person{
struct string *first_name;
struct string *last_name;
unsigned age;
float height;
float weight;
};
Se vede că structura person conține pointeri la două structuri de tip string. Relația este descrisă de schema bloc următoare (cu exemple de valori pentru variabilele primitive):
În continuare, vom da un exemplu de utilizare a acestor structuri:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(){
//make a default string with no content and length = 30
struct string * some_string = (struct string*)malloc(sizeof(struct string));
unsigned default_length = 30;
some_string->length = default_length;
some_string->str = (char*)malloc(default_length * sizeof(char));
strcpy(some_string->str, "Vasile");
//make a person structure in which all strings refer to the default empty string
struct person* new_person = (struct person*)malloc(sizeof(struct person));
new_person->first_name = some_string;
new_person->last_name = some_string;
new_person->age = 29;
new_person->height = (float)1.7;
new_person->weight = 68.9F;
printf("Persoana se numeste %s %s, are varsta de %d ani, inaltimea %f si greutatea %f\n", new_person->first_name->str,
new_person->last_name->str,
new_person->age,
new_person->height,
new_person->weight);
return 0;
}
În acest exemplu, schema bloc este diferită dintr-un punct de vedere esențial: ambii pointeri de tip string sunt referință la aceeași adresă, respectiv la același string. Astfel, dacă se modifică new_person->first_name, atunci implicit se modifică și new_person->last_name (de fapt este aceeași structură):
Pentru a face un rezumat, structura, in C, este un tip de dată compusă din tipuri primitive, sau alte structuri. Analog cu orice alt tip de dată, se pot defini variabile de tipul structurii, așa cum se pot defini variabile de tip primitiv. Limitarea fundamentală a structurilor este că acestea nu pot conține decât date, nu și funcții. Astfel se introduce noțiunea de clasă.

