在C语言中的结构体struct
只能定义成员变量,不能定义成员函数。例如,定义学生结构体。
#include <stdio.h>
struct student
{
char name[30]; // 姓名
unsigned short age; // 年龄
char sex; // 性别,m表示男,f表示女
unsigned long num; // 学号
};
int main()
{
// 初始化结构体变量stu
struct student stu = {"张三", 20u, 'm', 20240001ul};
printf("该学生的基本信息:%s, %u, %c, %lu\n", stu.name, stu.age, stu.sex, stu.num);
return 0;
}
上述代码中,student结构体成员变量无法赋值默认值,除非,定义具体结构体变量时,直接对该变量初始化。在C++中,struct
除了用于封装多个不同类型的数据成员,还可以包含成员函数,这些函数可以操作结构体的成员变量。
#include <iostream>
struct Rectangle
{
// 默认构造函数,初始化结构体成员变量
Rectangle()
{
width = 0;
height = 0;
}
// 除了上述方式,还可以按照本方法初始化结构体成员变量
// Rectangle():width(0),height(0)
// {
// }
// 构造函数,初始化结构体成员变量
Rectangle(int w, int h)
{
width = w;
height = h;
}
// 析构函数
~Rectangle()
{
std::cout << "调用析构函数~Rectangle()" << std::endl;
}
// 成员函数,计算矩形的面积
int area() const
{
return width * height;
}
int width;
int height;
};
int main()
{
// c++中定义结构体变量不需要加struct 关键字
Rectangle rect(5, 10);
// rect.width = 5;
// rect.height = 10;
// 调用成员函数计算面积
int area = rect.area();
std::cout << "长方形面积: " << area << std::endl;
return 0;
}
注意,在C++中,struct
和class
在语法上是相似的,只是默认的访问权限不同。struct
的成员默认是public
的,而class
的成员默认是private
的。但是,你可以在struct
或class
内部显式地指定成员的访问权限。