TI-S2 • Software (C++)
Gera Pronk
Bronnen:
Voor de Python liefhebbers - let niet op grammatica en spelling
| Eigenschap | C++ struct | Python class | Python dataclass | Python namedtuple |
|————————-|—————————————|—————————————|————————————————|——————————————-|
| Doel | Groeperen van variabelen tot datatype | Flexibel, zelf gedefinieerd datatype | Struct-achtig datatype met auto-gegenereerde functies | Lichtgewicht, immutable data-container |
| Standaard mutability | Mutable | Mutable | Mutable (optioneel immutable met frozen=True) | Immutable |
| Syntax boilerplate | Laag | Hoog (__init__ zelf schrijven) | Laag (auto __init__, __repr__, etc.) | Zeer laag |
| Field definitie | Binnen de struct | In __init__ of class body | Class body met type hints | Lijst van veldnamen |
| Type hints / checking | Compile time | Optioneel, geen compile time check | Ideaal voor type hints | Mogelijk maar beperkt |
| Gedrag als value type | Kopie bij toewijzing | Reference type | Reference type | Value achtig (immutable + comparable) |
| Comparison | Zelf implementeren | Zelf implementeren | Automatisch (__eq__) | Automatisch |
| Use case | Compact modelleren van data | Objecten met veel gedrag | Struct-achtige objecten zonder boilerplate | Kleine, read‑only records |
| Meest vergelijkbaar met C++ struct | - | Lijkt erop maar meer OOP-achtig | Beste Python‑equivalent | Alternatief maar immutable |
—
struct SensorData {
int temperature;
float humidity;
bool valid;
};
temperature, humidity en valid worden members genoemd —
SensorData s1;
s1.temperature = 22;
s1.humidity = 55.2;
s1.valid = true;
// of
SensorData s2 = {22, 55.2, true};
// of
struct SensorData s3 = {.temperature = 22, .humidity = 55.2, .valid = true}
Probeer de volgende code uit:
SensorData s4 = {55.2, true, 22};
Wat valt je op? —
Zie ook:
#include <iostream>
#include <bitset>
using namespace std;
struct SensorData{
int temperature;
float humidity;
bool valid;
}; // ; !
int main(){
SensorData s2 = {22, 55.2, true};
cout << "sensordata s2 is: " ;
cout << s2.temperature << ", " << s2.humidity << ", " << s2.valid << "\n";
struct SensorData s3 = {.temperature = 22, .humidity = 55.2, .valid = true};
cout << "sensordata s3 is: " ;
cout << s3.temperature << ", " << s3.humidity << ", " << s3.valid << "\n";
/* What happens beneath?
SensorData s4 = {55.2, true, 22};
cout << "sensordata s4 is: ";
cout << s4.temperature << ", " << s4.humidity << ", " << s4.valid;
*/
}
void update(SensorData& d) {
d.valid = true;
}
Maak een struct Student met: