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
struct
arepublic
(accessible from anywhere). You can also useprivate
andprotected
, butpublic
is 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
, andprotected
control the visibility and accessibility of members.private
members are only accessible within the class itself,protected
members are accessible within the class and derived classes, andpublic
members 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 arepublic
by 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 class
is 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 件のコメント:
コメントを投稿