青少年编程与数学 02-010 C++程序设计基础 22课题、自定义类型

青少年编程与数学 02-010 C++程序设计基础 22课题、自定义类型

  • 一、类(Class)
        • 定义类
        • 使用类
  • 二、结构体(Struct)
        • 定义结构体
        • 使用结构体
  • 三、枚举(Enum)
        • 定义枚举
        • 使用枚举
  • 四、联合体(Union)
        • 定义联合体
        • 使用联合体
  • 五、类模板(Class Template)
        • 定义类模板
        • 使用类模板
  • 六、类型别名(Type Alias)
        • 使用`typedef`定义类型别名
        • 使用`using`定义类型别名
  • 七、异构类型(Variant)
        • 使用`std::variant`
      • 总结

课题摘要:本文详细介绍了C++中的自定义类型,包括类、结构体、枚举、联合体、类模板、类型别名和异构类型。类是最常用的自定义类型,支持封装和继承,成员可设为私有、保护或公有。结构体默认公有访问权限,适用于简单数据封装。枚举定义命名整数值,提高代码可读性。联合体允许多种类型共享内存,但同一时间只能存储一种类型。类模板支持通用类定义,提高代码复用性。类型别名通过typedefusing为现有类型定义新名称。C++17引入的std::variant支持异构类型存储和操作。这些自定义类型使程序员能定义复杂数据结构和行为,提升代码健壮性、灵活性和可维护性。


在C++中,自定义类型是一种强大的功能,允许程序员根据自己的需求定义新的数据类型。自定义类型可以封装数据和操作这些数据的函数,提高代码的可读性、可维护性和重用性。C++提供了多种方式来定义自定义类型,主要包括类(class)、结构体(struct)、枚举(enum)和联合体(union)。以下是对这些自定义类型的详细介绍:

一、类(Class)

类是C++中最常用的一种自定义类型,用于封装数据和操作这些数据的函数。类可以定义私有(private)、保护(protected)和公有(public)成员,提供了封装和继承等面向对象编程的特性。

定义类
class MyClass {
private:
    int privateData;  // 私有成员变量
protected:
    int protectedData;  // 保护成员变量
public:
    MyClass(int data) : privateData(data) {}  // 构造函数
    void setPrivateData(int data) {
        privateData = data;
    }
    int getPrivateData() const {
        return privateData;
    }
};
使用类
MyClass obj(10);
obj.setPrivateData(20);
int data = obj.getPrivateData();  // data = 20

二、结构体(Struct)

结构体与类非常相似,但默认的访问权限是公有(public),而不是私有(private)。结构体通常用于简单的数据封装,不需要复杂的封装和继承。

定义结构体
struct MyStruct {
    int data;
    void setData(int newData) {
        data = newData;
    }
    int getData() const {
        return data;
    }
};
使用结构体
MyStruct obj;
obj.setData(10);
int data = obj.getData();  // data = 10

三、枚举(Enum)

枚举用于定义一组命名的整数值,使得代码更加可读和易于维护。枚举可以是强类型的,也可以是普通的。

定义枚举
enum Color { RED, GREEN, BLUE };
使用枚举
Color myColor = RED;
if (myColor == RED) {
    // 处理红色
}

四、联合体(Union)

联合体用于定义一个变量,该变量可以存储多种不同类型的值,但同一时间只能存储其中一种。联合体的大小是其最大成员的大小。

定义联合体
union MyUnion {
    int i;
    float f;
    char c[4];
};
使用联合体
MyUnion u;
u.i = 10;  // 存储整数
float f = u.f;  // 读取浮点数,结果未定义

五、类模板(Class Template)

类模板允许定义通用的类,可以在编译时指定具体的类型。类模板提高了代码的复用性和灵活性。

定义类模板
template <typename T>
class MyTemplateClass {
private:
    T data;
public:
    MyTemplateClass(T initData) : data(initData) {}
    void setData(T newData) {
        data = newData;
    }
    T getData() const {
        return data;
    }
};
使用类模板
MyTemplateClass<int> intObj(10);
intObj.setData(20);
int intData = intObj.getData();  // intData = 20

MyTemplateClass<float> floatObj(3.14f);
floatObj.setData(2.71f);
float floatData = floatObj.getData();  // floatData = 2.71

六、类型别名(Type Alias)

类型别名用于为现有类型定义一个新的名称,使得代码更加清晰和易于理解。可以使用typedefusing关键字定义类型别名。

使用typedef定义类型别名
typedef int Integer;
Integer x = 10;
使用using定义类型别名
using Integer = int;
Integer x = 10;

七、异构类型(Variant)

C++17引入了std::variant,用于表示多种类型中的一个。std::variant可以安全地存储和操作多种类型的数据。

使用std::variant
#include 
#include 

int main() {
    std::variant<int, float, std::string> v = 10;
    v = 3.14f;
    v = "Hello, World!";

    if (std::holds_alternative<std::string>(v)) {
        std::cout << std::get<std::string>(v) << std::endl;
    }
}

总结

C++中的自定义类型提供了强大的功能,使得程序员可以根据自己的需求定义复杂的数据结构和行为。类和结构体是最常用的自定义类型,枚举和联合体用于特定的场景,类模板和类型别名提高了代码的复用性和可读性,而std::variant提供了异构类型的支持。通过合理使用这些自定义类型,可以编写出更加健壮、灵活和可维护的代码。

你可能感兴趣的:(编程与数学,第02阶段,青少年编程,c++,编程与数学,开发语言)