C-Programmierung
Unterschied von C und C++ am Beispiel der Listen-Datenstruktur
← Beispiel zum Unterschied von C Strukturen und C++ Klassen | ● | Boilerplate Code →
Ein Beispiel zum Unterschied von Strukturen (C) und Klassen (C++) anhand der Implementierung einer Listen-Struktur:
Zwei Listen in C:
/* definitions */
typedef struct node *node_ptr;
/* prototypes */
void insert(node_ptr *ptr, const T &element);
node_ptr search(node_ptr ptr, const T &element);
void clear(node_ptr ptr);
int main()
{
/* initialization */
node_ptr root1=NULL;
node_ptr root2=NULL;
insert(root1, element1);
insert(root2, element2);
...
/* deallocation */
clear(root1);
clear(root2);
return(0);
}
typedef struct node *node_ptr;
/* prototypes */
void insert(node_ptr *ptr, const T &element);
node_ptr search(node_ptr ptr, const T &element);
void clear(node_ptr ptr);
int main()
{
/* initialization */
node_ptr root1=NULL;
node_ptr root2=NULL;
insert(root1, element1);
insert(root2, element2);
...
/* deallocation */
clear(root1);
clear(root2);
return(0);
}
Zwei Listen in C++:
class List
{
// member definitions
typedef struct node *node_ptr;
// member variables
node_ptr root;
// constructor (initialization)
List() {root=NULL;}
// destructor (deallocation)
~List() {clear();}
// member prototypes
void insert(const T &element);
node_ptr search(const T &element);
void clear();
};
int main()
{
List list1, list2; // implicit initialization via ctor
list1.insert(element1);
list2.insert(element2);
...
return(0); // implicit deallocation via dtor
}
{
// member definitions
typedef struct node *node_ptr;
// member variables
node_ptr root;
// constructor (initialization)
List() {root=NULL;}
// destructor (deallocation)
~List() {clear();}
// member prototypes
void insert(const T &element);
node_ptr search(const T &element);
void clear();
};
int main()
{
List list1, list2; // implicit initialization via ctor
list1.insert(element1);
list2.insert(element2);
...
return(0); // implicit deallocation via dtor
}
Was können C++ Klassen sonst noch?
- Eine Methode kann mit Funktionsrumpf (Implementierung) oder ohne Funktionsrumpf (d.h. nur als abstrakter Prototyp) spezifiziert werden → Interfaces.
- Eine Methode kann auch als Operator realisiert sein → Operator Overloading.
← Beispiel zum Unterschied von C Strukturen und C++ Klassen | ● | Boilerplate Code →