C++青少年简明教程:结构体

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;
}
相关推荐
MMjeaty1 小时前
查找及其算法
c++·算法
yong15858553432 小时前
1. Linux C++ muduo 库学习——库的编译安装
linux·c++·学习
mit6.8243 小时前
回溯剪枝trick
c++
渡我白衣4 小时前
C++世界的混沌边界:undefined_behavior
java·开发语言·c++·人工智能·深度学习·语言模型
却道天凉_好个秋4 小时前
c++ 协程
c++
无敌最俊朗@6 小时前
视频时间基 (time_base) 详解:时间的“刻度单位”
c++
脏脏a6 小时前
【C++ 入门】:引用、内联函数与 C++11 新特性(auto、范围 for、nullptr)全解析
开发语言·c++
AA陈超6 小时前
虚幻引擎5 GAS开发俯视角RPG游戏 P06-28 构建属性菜单小部件控制器
c++·游戏·ue5·游戏引擎·虚幻
恒者走天下6 小时前
cpp / c++零基础就业学习一站式学习平台
开发语言·c++·学习
qq_433554546 小时前
C++ 单调栈
数据结构·c++·算法