结构体和类:自定义数据类型的创建
在学习C++中,结构体和类允许我们自定义数据类型,将数据和相关的操作封装在一起。本文将探讨结构体和类的概念,以及如何使用它们创建自定义数据类型,实现更模块化和可维护的代码。
结构体(Structures):数据的组织者
1.结构体的定义与声明 结构体是一种用户自定义的数据类型,用于将不同类型的数据组织在一起。它通过struct关键字进行定义。
#include <iostream> struct Point { int x; int y; }; int main() { // 声明结构体变量 Point p1; // 访问结构体成员 p1.x = 10; p1.y = 5; // 输出结构体成员值 std::cout << "Point coordinates: (" << p1.x << ", " << p1.y << ")" << std::endl; return 0; }
在这个例子中,我们定义了一个Point结构体,它包含两个整型成员x和y,代表点的坐标。在main函数中,我们声明了一个Point类型的变量p1,通过.运算符访问并修改了结构体的成员。
2.结构体的初始化 结构体可以通过多种方式进行初始化:
// 初始化方式一:使用初始化列表 Point p1 = {3, 7}; // 初始化方式二:逐个初始化成员 Point p2; p2.x = 1; p2.y = 4;
3.结构体作为函数参数 结构体可以作为函数的参数传递,使函数能够操作结构体数据。
void printPoint(Point p) { std::cout << "Point coordinates: (" << p.x << ", " << p.y << ")" << std::endl; } int main() { Point p1 = {8, 2}; // 将结构体作为参数传递给函数 printPoint(p1); return 0; }
类(Classes):面向对象的封装
1.类的定义与声明 类是一种更高级别的封装,它不仅包含数据成员,还包含操作这些数据的成员函数。使用class关键字定义类。
#include <iostream> class Circle { public: // 数据成员 double radius; // 成员函数 double getArea() { return 3.14 * radius * radius; } }; int main() { // 声明类对象 Circle myCircle; // 初始化数据成员 myCircle.radius = 5.0; // 调用成员函数 double area = myCircle.getArea(); // 输出计算结果 std::cout << "Area of the circle: " << area << std::endl; return 0; }
在这个例子中,我们定义了一个Circle类,它有一个数据成员radius和一个成员函数getArea(),用于计算圆的面积。在main函数中,我们声明了一个Circle类型的对象myCircle,通过.运算符访问并初始化了类的数据成员,并调用了类的成员函数。
2.类的构造函数和析构函数 构造函数用于在对象创建时进行初始化操作,析构函数用于在对象销毁时进行清理工作。它们分别由特殊的成员函数constructor和destructor表示。
class Car { public: // 构造函数 Car() { std::cout << "Car object is created." << std::endl; } // 析构函数 ~Car() { std::cout << "Car object is destroyed." << std::endl; } }; int main() { // 创建Car对象,调用构造函数 Car myCar; // 对象离开作用域,调用析构函数 return 0; }
3.类的封装性 类具有封装性,即将数据和操作数据的函数封装在一起。通过将数据成员声明为private,可以实现数据的封装,只允许通过公有成员函数访问和修改数据。
class BankAccount { private: double balance; public: // 公有成员函数 void deposit(double amount) { balance += amount; } double getBalance() { return balance; } };
结构体和类的比较
1.相同点 a.都可以包含数据成员和成员函数。 b.都允许通过成员访问运算符.来访问和修改成员。
2.不同点 a.结构体的成员默认为public,而类的成员默认为private。 b.类具有封装性,能够更好地保护数据。 c.类支持继承、多态等面向对象的特性,而结构体不支持。
注意事项
PS:注意正确使用构造函数和析构函数,进行必要的初始化和清理工作。
#C++##结构体#