MST

星途 面试题库

面试题:C++枚举类型在类中的应用及作用域问题

定义一个类,类中包含一个枚举类型,用于表示不同的订单状态(如待处理、处理中、已完成、已取消)。在类中编写一个成员函数,根据传入的枚举值更新订单状态,并在另一个成员函数中获取当前订单状态并打印。同时,请解释为什么在类中定义枚举类型时,有时需要使用作用域解析运算符(::)来访问该枚举类型。
25.1万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
#include <iostream>

class Order {
public:
    // 定义枚举类型表示订单状态
    enum class OrderStatus {
        PENDING,
        PROCESSING,
        COMPLETED,
        CANCELED
    };

    // 更新订单状态的成员函数
    void updateStatus(OrderStatus newStatus) {
        currentStatus = newStatus;
    }

    // 获取并打印当前订单状态的成员函数
    void getStatus() const {
        switch (currentStatus) {
            case OrderStatus::PENDING:
                std::cout << "订单状态: 待处理" << std::endl;
                break;
            case OrderStatus::PROCESSING:
                std::cout << "订单状态: 处理中" << std::endl;
                break;
            case OrderStatus::COMPLETED:
                std::cout << "订单状态: 已完成" << std::endl;
                break;
            case OrderStatus::CANCELED:
                std::cout << "订单状态: 已取消" << std::endl;
                break;
        }
    }

private:
    OrderStatus currentStatus;
};

关于作用域解析运算符(::)

在类中定义枚举类型时,如果在类外部使用该枚举类型,需要使用作用域解析运算符(::)来访问。这是因为枚举类型定义在类的作用域内,使用作用域解析运算符可以明确指定要访问的枚举类型属于哪个类的作用域。这样可以避免命名冲突,特别是在多个类中可能定义了相同名称的枚举类型时。例如,如果在类 Order 外部想要定义一个 OrderStatus 类型的变量,就需要写成 Order::OrderStatus status;,以表明这里的 OrderStatusOrder 类中的枚举类型。