En struct är en konstruktion som tillåter att man "klumpar" samman data.
Tex skulle en struct (som är av nöje i mitt/ditt projekt) vara
struct Deltagare {
std::string namn;
int basta_tid;
}
sen kan man göra:
Deltagare deltagare1;
deltagare1.namn = "Olle";
deltagare1.tid = 20;
cout << "Deltagare \"" << deltagare1.namn << "\" tid: " << deltagare1.tid;
Man kan också skapa en lista med deltagare:
vector<Deltagare> deltagar_lista;
deltagare_lista.push_back(deltagare1);
for(vector<Deltagare>::iterator it = deltagar_lista.begin(); it < deltagar_lista.end(); it++)
cout << (*it).namn;
Som du ser är C++ inte optimalt för en nybörjare då det existera många begrepp man måste haja, krångligt syntax (subjektivt), man måste veta skillnaden mellan reference (&) och pekare (*) adress-operatorn (&) av-pekning:
Deltagare* d = new Deltagare;
d.namn = "olle"; // Kommer inte fungera då d är en pekare
(*d).namn = "olle"; // Fungera då * framför de "av-pekar" d. Kan även förkortas som:
d->namn = "olle"; // men är i princip samma sak
Deltagare* d2 = deltagare1; // fungerar inte (deltagare1 är ingen pekare)
Deltagare* d3 = &deltagare1; // fungerar & tar adressen till deltagare1 (dvs det d3 kan hantera)
Vågar jag rekommendera ett mer "nybörjarvänligt" språk där sådana saker är dolda abstraktioner? Tex: Java eller nått dynamiskt Ruby, Python
eller varför inte Smalltalk?
Samma i Java:
class Deltagare {
public String namn;
public int basta_tid;
}
class MittProgram {
public static void main(String[] args) {
Deltagare d = new Deltagare();
d.namn = "olle";
d.basta_tid = 10;
ArrayList<Deltagare> deltagar_lista = new ArrayList<Deltagare>();
deltagar_lista.add(d);
for(Deltagare deltagare : deltagar_lista) {
System.out.println(deltagare.namn);
}
}
}
Eller Ruby:
class Deltagare
attr_accessor :namn, :basta_tid
end
d = Deltagare.new
d.namn = "olle"
d.basta_tid = 10;
lista = [d]
lista.each do | deltagare |
puts deltagare.namn
end