C++入门——60s从0到1
枚举类型
枚举类型是一种用户自定义的数据类型,它允许我们在程序中定义一组命名的常量。在C++中,枚举类型是一种非常有用的数据类型,它可以帮助我们更好地组织和管理代码。
本篇文章将详细介绍C++中的枚举类型,包括枚举类型的定义、枚举变量的声明和使用、枚举类型的成员函数和枚举类型的继承等内容。
枚举类型的定义
枚举类型的定义通常包含关键字enum,后跟枚举类型名和枚举常量列表。下面是一个简单的示例:
enum Weekday {
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
};
在上面的示例中,我们定义了一个名为Weekday的枚举类型,它包含了7个枚举常量。这些枚举常量的名称分别是Monday、Tuesday、Wednesday、Thursday、Friday、Saturday和Sunday。这些名称是区分大小写的。
枚举变量的声明和使用
我们可以使用以下语法来声明一个枚举变量:
enum Weekday day;
在上面的示例中,我们声明了一个名为day的枚举变量。需要注意的是,枚举变量的数据类型必须与枚举类型的名称相同。在本例中,枚举变量的数据类型为Weekday。
我们可以使用以下语法来给枚举变量赋值:
day = Monday; // 将枚举变量赋值为Monday
在上面的示例中,我们将枚举变量day赋值为Monday。需要注意的是,枚举变量的赋值必须是枚举类型的常量之一。否则编译器将会报错。
我们可以使用以下语法来访问枚举变量的值:
cout << "The day is " << day << endl; // 输出The day is Monday
在上面的示例中,我们输出了枚举变量的值。需要注意的是,输出时需要使用整数形式来输出枚举常量。因此,输出结果为The day is 1。
枚举类型的成员函数
我们可以像其他数据类型一样在枚举类型中添加成员函数。下面是一个示例:
enum class Month { January, February, March, April, May, June, July, August, September, October, November, December }; ostream& operator<<(ostream& os, const Month& month) { os << monthName[month]; // 使用字符串数组monthName存储月份的名称 return os; } int main() { Month m1 = Month::January; // 使用::运算符访问嵌套的枚举常量 cout << "The " << m1 << " is the first month of the year." << endl; // 输出The January is the first month of the year. return 0; }
在上面的示例中,我们定义了一个名为Month的枚举类型,并在其中添加了一个名为operator<<的成员函数。这个函数的作用是将一个Month类型的对象输出到流中。为了实现这个功能,我们使用了一个字符串数组monthName来存储月份的名称。然后我们在operator<<函数中将月份的名称输出到流中。最后我们在main函数中对Month类型的对象进行了输出。需要注意的是,在使用运算符重载时需要使用关键字operator。
枚举类型的继承
由于枚举类型是一种用户自定义的数据类型,因此它可以与其他数据类型一样进行继承。下面是一个示例:
class Shape { public: virtual double area() const = 0; // pure virtual function }; class Circle : public Shape { // Circle继承自Shape private: double radius; public: Circle(double r) : radius(r) {} // 构造函数 double area() const override { return 3.14 * radius * radius; } // 实现area()函数 };
在上面的示例中,我们首先定义了一个抽象基类Shape,并在其中添加了一个纯虚函数area()。然后我们定义了一个派生类Circle,并将其继承自Shape类。最后我们在Circle类中对area()函数进行了实现。需要注意的是,在使用继承时需要在派生类的类名前加上关键字class或在类名后加上冒号(:)。