Was ist der Unterschied zwischen Structs und Klassen?

Ein Struct ist genauso wie eine Klasse ein Datentyp. Ein Struct funktioniert wie ein Container der mehrere Datentypen enthalten kann. Damit ist es möglich, komplexe Datentypen zu erzeugen.

Eine Klasse kann genauso wie ein Struct ein Container für verschiedene Datentypen sein. Darüber hinaus kann eine Klasse Methoden enthalten.

Ein Struct beschreibt also eine Menge von Zuständen. Eine Klasse beschreibt Zustände und Verhalten.

Beispiel:

Java: Die Klasse Article beschreibt den Zustand (description, price, weight) und das Verhalten printArticle() eines Objekts.

public class Article {

    String description;
    int price;
    double weight;

    void printArticle() {
        System.out.printf("%-20s %5d€ %5.2fkg\r\n", description, price, weight);
    }
}

// Anwendung:

Article a1 = new Article();
a1.description = "Java-Buch";
a1.price = 20;
a1.weight = 0.48;

a1.printArticle();

C: Der Struct Article beschreibt die Zustände description, price, weight. Im Gegensatz zum Java-Beispiel besitzt die Instanz a1 des Structs kein Verhalten. Die Methode printArticle() ist kein Bestandteil des Structs. Will man also in der Methode printArticle() auf die Werte des Structs zugreifen, muss beim Methodenaufruf ein Pointer auf das Struct als Argument übergeben werden (Zeile 19).

#include <stdio.h>

typedef struct {
    char *description;
    int price;
    double weight;
} Article;

void printArticle(Article *a){
    printf("%-20s %5d€ %5.2fkg\r\n", a->description, a->price, a->weight);
}

// Anwendung:

Article a1;
a1.description = "Java-Buch";
a1.price = 20;
a1.weight = 0.48;
printArticle(&a1);