Naja^^Was unterscheidet eine Struktur von einer Klasse?Technisch gesehen handelt es sich bei beiden um Datenstrukturen und Compiler unterscheiden diese beiden auch nur im verwendeten default Zugriffsmodus.
struct Test
{
Test();
~Test();
};
// ist gleich
class Test
{
public:
Test();
~Test();
};


Du kannst ja auchBecause the only difference between a structure and a class is that structure members have public access by default and class members have private access by default, you can use the keywords class or struct to define equivalent classes.
template <typename T>
template <class T>
#include "stdafx.h"
struct TestA
{
TestA() {}
virtual ~TestA() {}
virtual void func()
{
_tprintf(_T("TestA\n"));
}
};
struct TestB : public TestA
{
TestB() {}
virtual ~TestB() {}
virtual void func()
{
_tprintf(_T("TestB\n"));
}
};
int _tmain(int argc, _TCHAR* argv[])
{
TestA *ptrA = new TestA();
TestA *ptrB = new TestB();
ptrA->func();
ptrB->func();
delete ptrB;
delete ptrA;
return 0;
}
Ok, betrachten wir das mal einfach was genauer.... und warum hat man dann Klassen eingefügt wenn es deiner Meinung nach keinerlei Unterschied gibt
Sieh es ein: Klassen haben einfach mal Vorteile gegenüber Strukturen - bei richtiger Nutzung.



Auch hier werden einfach nur alle Variablen nacheinander aufgelistet (vtab, also die Tabelle mit den Virtuellen Funktionen ist auch nichts anderes als eine Variable wenn man es mal genau betrachtet). Die Funktionen einer Klasse stehen ja gar nicht im Objekt selber, sondern bekommen (in der einfachsten Version der Compiler Implementierung) einfach einen weiteren Parameter (das this objekt quasi) und gut ist.

Hat noch jemand eine Idee zu den Problemen ?
Ok das akzeptiere ich!Ok, betrachten wir das mal einfach was genauer.
Was ist denn eine Struktur? Ein Konstrukt (ich musst mich jetzt echt zusammen nehmen um nicht Objekt zu schreiben) das mehrere zusammenhängende Wert als logische Einheit speichern kann, oder?
Und was ist eine Klasse? Vereinfacht betrachtet ist es auch ein Konstrukt wie eine Struktur, nur das man hier noch die Funktionen mit dazu nimmt. Bezeichnet man dann als Objekt und hat den riesen Vorteil, dass man nicht nur die Eigenschaft sondern auch das Verhalten definieren kann.
Soweit, so gut.
Nur wenn man sich jetzt mal ansieht was der Compiler daraus macht (dabei unterscheiden sich reine C Compiler gar nicht so sehr von den C++ Compilern), dann stellt man fest, dass es eigentlich keinen großen Unterschied gibt. Wie Bingo schon geschrieben hat, macht ein C++ bei Strukturen und Klassen das gleiche, bis auf den kleinen Unterschied mit den Zugriffmodifikator. Und da kannst du dich auf den Kopf stellen wie du willst, das ist einfach per definition so.
Ein C Compiler macht sich das Leben sehr einfach und schreibt Datenfelder einfach schön hintereinander (unter zur Hilfenahme der Ausrichtungsgröße, die man bei x86 Maschine ja auch mal vergessen darf ohne das die Anwendung abschmiert). Was sich auf den ersten Moment wie ein riesen Unterschied anhört, stellt aber kein Problem da, da der C++ Compiler nichts anderes macht!Auch hier werden einfach nur alle Variablen nacheinander aufgelistet (vtab, also die Tabelle mit den Virtuellen Funktionen ist auch nichts anderes als eine Variable wenn man es mal genau betrachtet). Die Funktionen einer Klasse stehen ja gar nicht im Objekt selber, sondern bekommen (in der einfachsten Version der Compiler Implementierung) einfach einen weiteren Parameter (das this objekt quasi) und gut ist.
Also technisch gesehen gibt es keinen Unterschied.![]()

Ich meine mich auch zu erinnern, mein Chef hatte mir mal erzählt, dass als sie damals mit C++ angefangen haben, gab es das class Keyword noch garnicht, sondern nur struct.At this point, the object model becomes real in the sense that an object is more than the simple aggregation fo the data members of a class. An object of a C++ class with a virtual function is a fundamentally different beast from a simple C `struct`. Then why did I not at this point choose to make structs and classes different notions?
My intent was to have a single concept: a single set of layout rules, a single set of lookup rules, a single set of resolution rules, etc... I was convinced that if `struct` came to mean "C and compatibility" to users and `class` came to mean "C++ and advanced features," the community would fall into two distinct camps that would soon stop communicating. Beingn able to use as many or as few language features as needed when designing a class was an important idea to me. Only a single concept would support my ideas of a smooth and gradual transition from "traditional C-style programming," through class abstraction, to object-oriented programming. Only a single concept would support this notion of "you only pay for what you use" ideal.
Weil es in allen Lehrbüchern steht, eine neue Bezeichnung ja auch nicht so schlecht ist und ins Konzept passt?Aber warum nimmt man dann bei C++ trotzdem eher Klassen als Strukturen?

