User-defined types in C++ are types that you, the programmer, create, as opposed to the built-in types like int, float, or char. They allow you to model complex data structures and represent real-world entities more effectively. Here's a breakdown of the key user-defined types in C++:
1. Structures (struct)
- Purpose: Structures are primarily used to group related data members of different types into a single unit. They're useful for representing simple data objects.
- Members: Can contain variables of any data type (including other structures).
- Access Specifiers: By default, members of a
structarepublic(accessible from anywhere). You can also useprivateandprotected, butpublicis most common. - Methods: In C++, structs can also contain member functions (methods), making them very similar to classes (explained below). However, structs are generally preferred for simpler data aggregations.
- Example:
struct Point {
int x;
int y;
};
int main() {
Point p1;
p1.x = 10;
p1.y = 20;
std::cout << "x: " << p1.x << ", y: " << p1.y << std::endl;
return 0;
}
2. Classes (class)
- Purpose: Classes are the foundation of object-oriented programming (OOP) in C++. They allow you to combine data (member variables) and functions that operate on that data (member functions or methods) into a single unit. Classes are used to create objects, which are instances of the class.
- Members: Can contain variables and functions of any data type.
- Access Specifiers:
public,private, andprotectedcontrol the visibility and accessibility of members.privatemembers are only accessible within the class itself,protectedmembers are accessible within the class and derived classes, andpublicmembers are accessible from anywhere. - Methods: Functions defined within a class. They operate on the class's data members.
- Constructors: Special member functions that are automatically called when an object of the class is created. Used for initialization.
- Destructors: Special member functions that are automatically called when an object is destroyed. Used for cleanup (e.g., releasing resources).
- Inheritance: Classes can inherit from other classes, allowing you to create hierarchies of related types.
- Polymorphism: Allows objects of different classes to be treated as objects of a common type.
- Example:
class Rectangle {
private:
int width;
int height;
public:
// Constructor
Rectangle(int w, int h) : width(w), height(h) {}
int getArea() {
return width * height;
}
void setWidth(int w) {
width = w;
}
void setHeight(int h) {
height = h;
}
};
int main() {
Rectangle r1(5, 10);
std::cout << "Area: " << r1.getArea() << std::endl;
r1.setWidth(7);
std::cout << "New Area: " << r1.getArea() << std::endl;
return 0;
}
3. Enumerations (enum and enum class)
- Purpose: Create a set of named integer constants. This makes code more readable and less error-prone.
enum: Older style. Values are implicitly convertible to integers.enum class(scoped enums - C++11 and later): Stronger type safety. Values are not implicitly convertible to integers. Generally preferred.- Example:
enum class Color {
RED,
GREEN,
BLUE
};
Color myColor = Color::BLUE; // Note the scope resolution
// int colorValue = myColor; // Error: No implicit conversion
int colorValue = static_cast<int>(myColor); // Explicit conversion is required
if (myColor == Color::RED) {
// ...
}
4. Unions (union)
- Purpose: Allows multiple variables to share the same memory location. Useful for situations where you need to store different types of data at the same location, but only one at a time.
- Size: The size of a union is determined by the largest data type it contains.
- Example:
union Data {
int i;
float f;
char str[20];
};
int main() {
Data d;
d.i = 10;
std::cout << "Integer: " << d.i << std::endl;
d.f = 3.14f; // Overwrites the integer value
std::cout << "Float: " << d.f << std::endl;
return 0;
}
Key Differences and When to Use Them:
struct: Simple data aggregation. Often used for PODs (Plain Old Data). Members arepublicby default. Can have methods (but generally simpler than classes).class: Object-oriented programming. Encapsulation, inheritance, polymorphism. Access specifiers (public,private,protected) for controlling member access. Methods, constructors, destructors.enum/enum class: Named integer constants.enum classis type-safe.union: Sharing memory. Use with caution!
In most modern C++ code, class is the most commonly used user-defined type, especially when working with object-oriented principles. struct is often used for simpler data structures, and enum/enum class for representing a set of named constants. union is used less frequently due to its potential for data corruption if not handled carefully.
0 件のコメント:
コメントを投稿