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;
}
相关推荐
刃神太酷啦21 分钟前
数据结构(蓝桥杯常考点)
数据结构·c++·蓝桥杯c++组
17´32 分钟前
Qt从入门到入土(八) -打包Qt程序
开发语言·c++·qt
誓约酱1 小时前
(每日一题) 力扣 860 柠檬水找零
linux·c语言·c++·算法·leetcode·职场和发展
城西往事1 小时前
DeepSeek 解释C语言函数memset
c++
孞㐑¥2 小时前
C++vector类
开发语言·c++·经验分享·笔记
chenyuhao20243 小时前
非常重要的动态内存错误和柔性数组1
c语言·c++·算法·柔性数组
坚定学代码4 小时前
Qt C++ 实际开发中宏编译的运用
c++·qt
香菇滑稽之谈4 小时前
装饰器模式的C++实现示例
c++·算法·设计模式·装饰器模式
小赵起名困难户4 小时前
蓝桥杯备赛-差分-重新排序
c++·算法·蓝桥杯
牵牛老人4 小时前
C++设计模式-简单工厂模式:从原理、应用、实践指南与常见问题和解决方案深度解析
c++·设计模式·简单工厂模式