C++青少年简明教程:结构体
在C++中,结构体(struct)是一种复合数据类型,它可以包含多个不同类型的数据成员(例如整数、浮点数、字符串、其他结构体等)。结构体的主要用途是将一组逻辑相关的数据项组织在一起。结构体中的每个元素称为成员(member)。结构体主要用于处理具有多个属性的复杂数据结构。
定义结构体的基本语法如下:
struct StructName {
Type1 member1;
Type2 member2;
// ...
};
其中,StructName是你为结构体定义的名称,Type1和Type2是成员变量的类型,member1和member2是成员变量的名称。
阅读C++中的结构体资料时,常见的说法结构体变量,结构体对象、结构体实例基本上是指的同一件事情。这些术语都是指的由结构体定义创建的变量。在C++中,结构体是一种用户定义的数据类型,因此由结构体创建的变量也可以被视为对象(或实例)。例如:
假设有结构体定义:
struct Student {
std::string name;
int age;
float grade;
};
你可以使用这个结构体定义来创建一个结构体变量(或结构体对象,或结构体实例):
Student s;
创建结构体的实例后,就可以使用点运算符.来访问和调用结构体的成员。这包括结构体的数据成员和函数成员。
下面是一个具体的示例,定义了一个名为Student的结构体,包含了三个成员:name,age和grade。
cpp
#include <iostream>
#include <string>
using namespace std;
struct Student {
string name;
int age;
float grade;
};
int main() {
// 创建一个Student结构体的实例
Student s;
s.name = "John Doe";
s.age = 20;
s.grade = 3.7;
// 输出Student结构体的信息
cout << "Name: " << s.name << "\n";
cout << "Age: " << s.age << "\n";
cout << "Grade: " << s.grade << "\n";
return 0;
}
在这个示例中,首先定义了一个Student结构体,然后在main函数中创建了一个Student的实例s,并为其成员赋值。然后,使用cout输出了Student实例的信息。其中使用.运算符来访问和设置s的数据成员name、age和grade。
注意,结构体的成员可以是任何类型,包括其他结构体。此外,结构体也可以包含函数【这些函数被称为成员函数(member function),成员函数可以访问结构体中的成员变量,并根据需要对这些变量进行操作】,这使得它们在功能上与类(class)非常相似。实际上,类和结构体的主要区别在于默认的访问级别:类的成员默认为私有(private),而结构体的成员默认为公有(public)。
下面是一个包含函数的结构体的例子:
cpp
#include <iostream>
#include <string>
using namespace std;
struct Student {
string name;
int age;
float grade;
// 这是一个成员函数,它可以访问结构体的所有成员
void print() {
cout << "Name: " << name << "\n";
cout << "Age: " << age << "\n";
cout << "Grade: " << grade << "\n";
}
};
int main() {
// 创建一个Student结构体的实例
Student s;
s.name = "John Doe";
s.age = 20;
s.grade = 3.7;
// 使用成员函数输出Student结构体的信息
s.print();
return 0;
}
在这个例子中,我们在Student结构体中定义了一个名为print的成员函数,它可以直接访问并打印结构体的所有成员。然后,在main函数中,我们创建了一个Student的实例,并使用。运算符调用了print函数来打印学生的信息。
下面给出一个求矩形面积和周长的示例
cpp
#include <iostream>
using namespace std;
// 定义一个表示矩形的结构体
struct Rectangle {
double width; // 矩形宽度
double height; // 矩形高度
// 成员函数:计算矩形面积
double area() {
return width * height;
}
// 成员函数:计算矩形周长
double perimeter() {
return 2 * (width + height);
}
};
int main() {
Rectangle rect; // 创建一个Rectangle对象
rect.width = 3.0; // 初始化width
rect.height = 4.0; // 初始化height
// 调用成员函数
double area = rect.area();
double perim = rect.perimeter();
// 输出结果
std::cout << "Area: " << area << std::endl; // 输出 12.0
std::cout << "Perimeter: " << perim << std::endl; // 输出 14.0
return 0;
}
对上面程序改进,使用构造函数
构造函数是一种特殊的成员函数,它在创建对象时自动被调用,用于初始化对象的数据成员。构造函数在创建对象时必须被调用,如果没有提供构造函数,编译器会自动生成一个默认的无参构造函数。但是,如果你需要在对象创建时执行一些特殊的初始化操作,就必须自己定义构造函数。
构造函数是一个特殊的成员函数,它用于初始化对象。在C++中,构造函数的名字与类名(或结构体名)相同,并且没有返回类型(包括void)。对于上面的Rectangle结构体,如果你想添加一个构造函数来初始化宽度和高度:
Rectangle(double w, double h) : width(w), height(h) {}
解释一下:
Rectangle(double w, double h)定义了一个构造函数,它接收两个double类型的参数w和h。
width(w), height(h)是初始化列表,使用传入的w和h值初始化Rectangle类的width和height成员变量。
初始化列表的形式为:成员变量名(值)。
大括号{}内可以添加构造函数需要执行的其他操作,但这里是空的。
改进后的源码如下:
cpp
#include <iostream>
using namespace std;
// 定义一个表示矩形的结构体
struct Rectangle {
double width; // 矩形宽度
double height; // 矩形高度
// 构造函数
Rectangle(double w, double h) : width(w), height(h) {}
// 成员函数:计算矩形面积
double area() {
return width * height;
}
// 成员函数:计算矩形周长
double perimeter() {
return 2 * (width + height);
}
};
int main() {
// 创建一个矩形对象
Rectangle rect(3.0, 4.0);
// 调用成员函数计算面积和周长
double area = rect.area();
double perim = rect.perimeter();
// 输出结果
cout << "Area: " << area << endl; // 输出 12.0
cout << "Perimeter: " << perim << endl; // 输出 14.0
return 0;
}