一、枚举 enum
1.普通枚举,枚举在C++中使用比C使用简单
C语言:
enum Color
{red,green,blue
};
enum Color c = red;
C++语言
enum Color
{red,green,blue
};
Color c = red;
C++认为这种枚举方式会污染名字,即:枚举使用的名字,在同一个作用域不能被变量使用
C++希望 red, green, blue……等枚举变量应该被限制在 Color 作用域里面。类比 struct,假设在 struct中定义了一个叫 Node 的结点变量,Node可以在struct 外部任何地方使用,而且外部也能定义 Node。但是枚举不行,在创建了一个枚举后,在整个作用域内,相同变量名不能被重新使用。
struct Student
{int id;char[20] name;
};
enum Person
{id,name,sex
};
struct Student stu;
stu.id = 20;
int id = 10;
// id这个变量名在 struct Student 作用范围内仍然可以使用,并且不影响 struct Student中的变量。enum Person per = name;
int name = 18; // 报错
// 在枚举中使用的变量名 name 不能被作用范围中其他变量定义使用!
2.C++范围枚举
(2)定义和使用
enum class 枚举名{成员.....
};Color c = Color::red;
(2)示例代码
#include <iostream>
using namespace std;// 普通枚举
enum Color
{red,green = 20,blue
};// 范围枚举
enum class Person
{name,sex = 44,age
};// 范围枚举
enum class Student
{name,sex = 21,age
};int main()
{cout << "普通枚举" << endl;Color c = green;cout << "c = " << c << endl;cout << "red = " << red << endl;cout << "blue = " << blue << endl;cout << "范围枚举" << endl;Person per = Person::sex;Student stu = Student::sex;cout << "输出 Person sex :" << (int)per << endl;cout << "输出Person sex :" << (int)stu;system("pause");return 0;
}
(3)在C++中使用枚举需要注意的事项
1.对于普通枚举,C++可以使用 枚举名 变量名 = 枚举成员eg: Color c = red;
C++可以使用这样的方式直接去定义变量,而不需要加上 enumeg: enum Color c = red; // 可以不用这样去定义变量2.对于普通枚举,C++/C可以直接使用 cout/printf 直接输出枚举变量的值eg: cout << c << endl;printf("%d\n",c);这里 会对 枚举变量进行隐式转换3.对于范围枚举,C++必须使用 :: 来获取枚举变量的值eg: Person per = Person::sex;使用 Person per = sex; // 会发生错误4.对于范围枚举,想要输出枚举变量的值,必须做强制类型转换eg: cout << "输出 Person sex :" << (int)per << endl;使用 cout << per << endl; // 会发生错误
二、结构体 Struct
C和C++的区别体现在结构体中
(1)C中的 struct
在C语言中,结构体(struct)是一种用户自定义的数据类型,用于组织多个不同类型的数据成员。
- **定义:**结构体通过
struct
关键字进行定义,通常位于函数外部,可以包含多个数据成员,每个成员可以是任意类型的数据。 - **成员访问:**结构体的成员使用点操作符(
.
)进行访问,通过结构体变量的名字加上成员名来访问具体的成员。 - **默认访问权限:**C语言中的结构体成员默认是
public
的,可以在任何地方被访问。 - **没有成员函数:**在C语言中,结构体只能包含数据成员,不能包含成员函数。
- **无继承:**C语言中的结构体不能进行继承操作,即不能有父类和子类的概念。
- **没有构造函数和析构函数:**C语言中的结构体没有构造函数和析构函数的概念,结构体的初始化和清理工作通常由程序员手动完成。
(2)C++中的struct
- **定义:**结构体通过
struct
关键字进行定义,与C语言中的结构体类似,但在C++中,结构体可以包含成员函数、构造函数、析构函数等。 - **成员访问:**结构体的成员仍然可以使用点操作符(
.
)进行访问,但在C++中,可以使用->
操作符访问结构体指针的成员。 - **默认访问权限:**C++中的结构体成员默认是
private
的,可以使用访问修饰符(如public
、private
、protected
)来控制成员的访问权限。 - **成员函数:**C++中的结构体可以包含成员函数,这意味着结构体不仅可以用来组织数据,还可以定义与数据相关的操作。
- **继承:**C++中的结构体可以被继承,可以有父类和子类的概念,可以使用继承和派生等面向对象的特性。
- **构造函数和析构函数:**C++中的结构体可以有构造函数和析构函数,用于对象的初始化和清理工作,可以通过构造函数进行初始化,析构函数进行资源的释放。
三个访问限定修饰符:public: 公开的,外界可以直接访问private: 私有的,外界不能直接访问,里面可以直接访问protected: 受保护的,外界不能直接访问,里面可以直接访问,它的儿子可以访问(这个设计是为了继承而来的,没有继承的时候不需要使用)当遇到访问限定修饰符后,接下来没有遇到下一个访问限定修饰符后,中间的所有内容都是按照这个访问限定修饰符的访问方式eg:class Student{public:int a;int b;private:};
a,b都是 public 的访问方式。struct 默认访问方式为 public 公有
class 默认访问方式为 private 私有
struct/class的基本使用语法,建议使用class
struct/class 类名
{默认的访问方式访问限定符:……访问限定符:……
};eg: 描述一个人
class Person
{char* name;int age;public:void Print_Name(); // 成员函数void Print_Age(){cout << age << endl;}// C++的封装// private 只能在类内访问// public 可以在类内 和 类外访问// protected 只能在类内访问,不能再 类外访问,它的儿子可以访问
};