lezione 2 + 1/2

This commit is contained in:
Alessandro Ferro 2021-03-18 23:13:51 +01:00
parent 2e5192afe6
commit b1b5f30109
4 changed files with 73 additions and 0 deletions

Binary file not shown.

0
teoria/enumeration.cpp Normal file
View File

Binary file not shown.

73
teoria/struct.cpp Normal file
View File

@ -0,0 +1,73 @@
#include <iostream>
using namespace std;
void differentStructSize();
void studentStruct();
int main(){
studentStruct();
return 0;
}
void studentStructWithConstructor(){
struct StudentNoDefaultConstructor{
string nome, cognome, matricola;
int annoCorso;
StudentNoDefaultConstructor(string n, string c, string m, int a){
nome = m;
cognome = c;
matricola = m;
annoCorso = a;
}
};
struct StudentNoDefaultConstructor st1{"Alan","Turing","N86000000",1}; //OK
//struct StudentNoDefaultConstructor st2; //errore. no default constructor
/* Qui lascia compilare la dichiarazione di st3 ma non permette di lavorarci
su, causa costruttore di default mancante. */
struct StudentNoDefaultConstructor st3();
//st3.nome = "Planck";
//cout<<st3.nome;
struct StudentOnlyDefaultConstructor{
string nome, cognome, matricola;
int annoCorso;
StudentOnlyDefaultConstructor() = default;
};
struct StudentOnlyDefaultConstructor st4;
struct StudentOnlyDefaultConstructor st5();
//struct StudentOnlyDefaultConstructor st6{"Alan","Turing","N86000000",1}; errore
}
void studentStruct(){
struct Student{
string nome, cognome, matricola;
int annoCorso;
};
struct Student st1{"Alan","Turing","N86000000",1};
struct Student st2 = {"Kurt","Godel","N86000001",1};
//Student st3("Kurt","Godel","N86000001",1); // errore, richiede esplicitamente un costruttore
struct Student st4;
struct Student st5();
cout<<st1.cognome<<" e "<<st2.cognome<<" studiano alla Federico II"<<endl;
}
void differentStructSize(){
/*
A causa della struttura di un elaboratore, due struct con gli stessi elementi
potrebbero avere una dimensione diversa.
Con g++ 7.5.0 senza opzioni di ottimizzazione S1 pesa 96 byte, mentre S2
pesa 64 byte.
*/
struct S1{
char c1;
int i;
char c2;
};
struct S2{
char c1,c2;
int i;
};
cout<<sizeof(S1)<<" "<<sizeof(S2)<<endl; //12 8
}