C++ 复合类型详细介绍
在 C++ 中,复合类型是基于基本数据类型构建的。它们允许我们组合和操作多个数据。主要的复合类型包括数组、指针、字符出、结构体、共用体、枚举和类。
1. 数组
数组是存储固定大小和类型相同的元素序列。
- 定义 :
type arrayName[arraySize];
- 特点 :
- 所有元素类型相同。
- 元素在内存中连续存储。
- 通过下标(从0开始)访问元素。
示例代码:
cpp
#include <iostream>
using namespace std;
int main() {
int numbers[3] = {1, 2, 3}; // 定义一个整数数组并初始化
cout << "第一个元素: " << numbers[0] << endl; // 访问第一个元素
return 0;
}
2. 指针
指针是一种特殊的变量,用于存储另一个变量的地址。
- 定义 :
type *pointerName;
- 特点 :
- 存储内存地址。
- 可以指向任何类型。
- 通过
*
运算符访问指针指向的值。
示例代码:
cpp
#include <iostream>
using namespace std;
int main() {
int var = 8; // 普通变量
int *ptr = &var; // 指针变量,指向 var 的地址
cout << "var 的值: " << *ptr << endl; // 使用指针访问 var 的值
return 0;
}
3. 字符串
字符串是字符数组的特殊形式,用于存储文本。
- 定义 :
char strName[strSize];
- 特点 :
- 以 null 字符
' '
结尾。 - 可以使用字符串字面量进行初始化。
- 以 null 字符
示例代码:
cpp
#include <iostream>
using namespace std;
int main() {
char greeting[6] = "Hello"; // 字符串初始化
cout << "问候语: " << greeting << endl; // 输出字符串
return 0;
}
4. 结构体
结构体是不同类型数据的集合,用于创建复杂的数据结构。
- 定义 :
struct StructureName { type1 member1; type2 member2; ... };
- 特点 :
- 可包含不同类型的数据。
- 通过点运算符访问成员。
示例代码:
cpp
#include <iostream>
using namespace std;
struct Person {
char name[50];
int age;
};
int main() {
Person person = {"Alice", 30}; // 结构体初始化
cout << "姓名: " << person.name << ", 年龄: " << person.age << endl; // 访问成员
return 0;
}
5. 共用体
共用体允许在相同的内存位置存储不同的数据类型,但一次只能使用一个成员。
- 定义 :
union UnionName { type1 member1; type2 member2; ... };
- 特点 :
- 成员共享内存。
- 同一时间只能存储一个成员的值。
示例代码:
cpp
#include <iostream>
using namespace std;
union Data {
int i;
float f;
};
int main() {
Data data;
data.i = 10; // 赋值给 int 成员
cout << "Data.i = " << data.i << endl;
data.f = 23.5; // 赋值给 float 成员
cout << "Data.f = " << data.f << endl;
return 0;
}
6. 枚举
枚举用于定义一组命名的整数常量。
- 定义 :
enum EnumName { constant1, constant2, ... };
- 特点 :
- 便于阅读和维护。
- 默认从 0 开始赋值。
示例代码:
cpp
#include <iostream>
using namespace std;
enum Color { red, green, blue };
int main() {
Color c = blue;
cout << "枚举值: " << c << endl; // 输出枚举值
return 0;
}
7. 类
类是创建对象的模板,用于实现面向对象编程。
- 定义 :
class ClassName { accessSpecifier: type memberName; ... };
- 特点 :
- 封装数据和函数。
- 支持继承和多态。
示例代码:
cpp
#include <iostream>
using namespace std;
class Box {
public:
double length;
void setWidth(double wid) {
width = wid;
}
double getWidth() {
return width;
}
private:
double width;
};
int main() {
Box box;
box.length = 10.0; // 公共成员,可以直接访问
box.setWidth(5.0); // 私有成员,通过公共方法访问
cout << "盒子宽度: " << box.getWidth() << endl;
return 0;
}