mirror of https://github.com/xfarrow/lasd.git
lezione 2 + 1/2
This commit is contained in:
parent
2e5192afe6
commit
b1b5f30109
BIN
teoria/a.out
BIN
teoria/a.out
Binary file not shown.
Binary file not shown.
|
@ -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
|
||||||
|
}
|
Loading…
Reference in New Issue