In computer science, a composite data type or compound data type is any data type which can be constructed in a program using the programming language's primitive data types and other composite types. It is sometimes called a structure or aggregate data type, although the latter term may also refer to arrays, lists, etc. The act of constructing a composite type is known as composition. Composite data types are often contrasted with scalar variables. C/C++ structures and classes A struct is C's and C++'s notion of a composite type, a datatype that composes a fixed set of labeled fields or members. It is so called because of the struct keyword used in declaring them, which is short for structure or, more precisely, user-defined data structure. In C++, the only difference between a struct and a class is the default access level, which is private for classes and public for structs. Note that while classes and the class keyword were completely new in C++, the C programming language already had a raw type of structs. For all intents and purposes, C++ structs form a superset of C structs: virtually all valid C structs are valid C++ structs with the same semantics. Declaration A struct declaration consists of a list of fields, each of which can have any type. The total storage required for a struct object is the sum of the storage requirements of all the fields, plus any internal padding. For example: struct Account { int account_number; char *first_name; char *last_name; float balance; }; defines a type, referred to as struct Account. To create a new variable of this type, we can write struct Account myAccount; which has an integer component, accessed by myAccount.account_number, and a floating-point component, accessed by myAccount.balance, as well as the first_name and last_name components. The structure myAccount contains all four values, and all four fields may be changed independently. Since writing struct Account repeatedly in code becomes cumbersome, it is not unusual to see a typedef statement in C code to provide a more convenient synonym for the struct. However, some programming style guides advise against this, claiming that it can obfuscate the type. For example: typedef struct Account_ { int account_number; char *first_name; char *last_name; float balance; } Account; In C++ code, the typedef is not needed because types defined using struct are already part of the regular namespace, so the type can be