当前课程知识点:C++语言程序设计基础 > 第4章 类与对象 > 结构体与联合体 > 结构体(例4-7)
结构体是一种特殊形态的类
与类的唯一区别:类的缺省访问权限是private,结构体的缺省访问权限是public
结构体存在的主要原因:与C语言保持兼容
什么时候用结构体而不用类
定义主要用来保存数据、而没有什么操作的类型
人们习惯将结构体的数据成员设为公有,因此这时用结构体更方便
结构体的定义
struct 结构体名称 { 公有成员 protected: 保护型成员 private: 私有成员 };
结构体的初始化
如果一个结构体的全部数据成员都是公共成员,并且没有用户定义的构造函数,没有基类和虚函数(基类和虚函数将在后面的章节中介绍),这个结构体的变量可以用下面的语法形式赋初值
类型名 变量名 = { 成员数据1初值, 成员数据2初值, …… };
例4-7用结构体表示学生的基本信息
#include#include#includeusing namespace std; struct Student { //学生信息结构体 int num; //学号 string name; //姓名,字符串对象,将在第6章详细介绍 char sex; //性别 int age; //年龄 }; int main() { Student stu = { 97001, "Lin Lin", 'F', 19 }; cout << "Num: " << stu.num << endl; cout << "Name: " << stu.name << endl; cout << "Sex: " << stu.sex << endl; cout << "Age: " << stu.age << endl; return 0; } 运行结果: Num: 97001 Name: Lin Lin Sex: F Age: 19
大家好
欢迎回来继续学习
C++语言程序设计
这一节我们来学习结构体
结构体这种数据结构
是在C语言中就有的
C++呢也继承了结构体
这种数据结构
那么实际上呢
在C++中
它的结构体已经不是
当初C语言中的那个结构体了
C++的结构体是一种特殊的类
那么它跟类的差别在哪儿呢
类里面的成员
默认情况下
如果你定义在类体的最开头
你可以不写访问空间属性
它默认就是私有的
而结构体里面的成员
如果你定义在结构体的开头
并且不写访问控制属性
它默认是公有的
什么时候我们会要用结构体呢
既然它就是一种特殊的类
那我们用类不就可以了吗
干吗还用结构体呢
如果我们需要表示
一组集成在一起的数据
而基本上没有太多的函数
去表示它的功能
没有太多的操作
这个时候呢
我们就可以使用结构体
或者有的时候
我们需要把这一组数据
集成在一起
构成一个新的类型
但是又希望外部
能够比较方便地访问这些数据
就把这些数据定义成公有的
希望这样的话
也可以选择结构体
但是结构体呢
在C++中用得并不多
很多时候是为了跟C语言兼容
来使用结构体的
现在我们来看怎么样定义
和初始化结构体
那结构体的定义的语法形式呢
看起来跟类是很像的
只不过它是用struct关键字
而不是class
后面跟的是结构体的名字
然后紧跟着开始大括号之后
定义的成员
就默认是公有成员
不用写public
如果你想把成员定义成
保护型的 私有型的也可以
那么就要写成protected
private就可以了
结构体的成员呢
既可以是数据成员
也可以是函数成员
在以前C语言中的结构体中呢
是只能定义数据
不能定义函数成员的
在C++中我们说了
结构体其实就是一种特殊的类
跟类一样
它也可以定义函数成员
如果一个结构体的全部数据成员
都是公有成员
并且没有用户定义的构造函数
没有基类和虚函数
基类和虚函数
我们在后续章节中会介绍
那么这种情况下
这个结构体的变量
就可以像这样来进行初始化
下面我们来看一个结构体的例子
好 这是一个使用结构体的例子
我们看在这儿定义了个
学生信息结构体
它包括学号 姓名 性别
和年龄
那我们知道
在结构体中呢
如果你什么访问控制属性都不写
它默认的就是public属性
现在我们看在主函数中
使用这个结构体怎么使用
因为它只有数据
没有任何其他的成员函数
所以我们可以用这样的
大括号里面列出初始值的方式
对这个结构体
变量进行初始化
对结构体对象进行初始化
然后使用的时候呢
我们可以直接用结构体
对象名.成员名的方式
访问它的所有成员
因为它都是公有成员
所以在外部都是可以访问的
-导学
--第1章导学
-计算机系统简介
--计算机系统简介
--计算机系统简介 测试题
-计算机语言和程序设计方法的发展
--计算机语言和程序设计方法的发展 测试题
-面向对象的基本概念
--面向对象的基本概念 测试题
-程序的开发过程
--程序的开发过程
--程序的开发过程 测试题
-信息的表示和储存
--计算机的数字系统
--数据的编码表示
--信息的表示和储存 测试题
-实验指导
-导学
--第二章导学
-C++语言概述
--C++语言概述 测试题
-基本数据类型、常量、变量
--程序举例
--基本数据类型、常量、变量 测试题
-运算与表达式
--运算与表达式 测试题
-实验二:简单程序设计(上)
-数据的输入和输出
--数据的输入和输出
--数据的输入和输出 测试题
-选择结构
--if语句
--switch语句
--选择结构 测试题
-循环结构
--for语句
--循环结构 测试题
-自定义类型
--自定义类型
--自定义类型
-第2章小结
--第二章小结
-实验二:C++简单程序设计(下)
-导学
--导学
-函数定义
--函数定义
--函数定义 测试题
-函数调用
--例3-2
--例3-3
--例3-4
--例3-5
--例3-6
--函数调用 测试题
-嵌套与递归
--例3-9
--例3-10
--嵌套与递归 测试题
-函数的参数传递
--函数的参数传递
--函数的参数传递 测试题
-引用类型
--引用类型 测试题
-含有可变参数的函数
--含有可变参数的函数 测试题
-内联函数
--内联函数 测试题
-constexpr函数
--CONSTEXPR函数课后习题
-带默认参数值的函数
--带默认参数值的函数 测试题
-函数重载
--函数重载 测试题
-C++系统函数
--C++系统函数习题
-第3章小结
--第三章小结
-实验三(上)函数的应用
-实验三(下)函数的应用
-导学
--导学
-面向对象程序的基本特点
--面向对象程序的基本特点 测试题
-类和对象
--类和对象的定义
--类和对象 测试题
-构造函数
--构造函数基本概念
--委托构造函数
--复制构造函数
--构造函数 测试题
-析构函数
--析构函数
--析构函数 测试题
-类的组合
--类的组合
--类的组合程序举例
--前向引用声明
--类的组合 测试题
-UML简介
--UML简介
--UML简介课后习题
-结构体与联合体
--结构体与联合体 测试题
-枚举类
--枚举类
--枚举类 测试题
-第4章小结
--第四章小结
-实验四(上)
--实验四(上)
-实验四(下)
--实验四(下)
-导学
--导学
-标识符的作用域与可见性
--标识符的作用域与可见性 测试题
-对象的生存期
--对象的生存期
--对象的生存期 测试题
-类的静态成员
--类的静态成员 测试题
-类的友元
--类的友元 测试题
-共享数据的保护
--共享数据的保护 测试题
-多文件结构和预编译命令
--多文件结构和预编译命令 测试题
-第5章小结
--小结
-实验五
--实验五
-导学
--导学
-数组的定义与初始化
--数组的定义与使用
--一维数组应用举例
--数组的定义与初始化 测试题
-数组作为函数的参数
--数组作为函数的参数 测试题
-对象数组
--对象数组
--对象数组 测试题
-基于范围的for循环
-指针的定义和运算
--指针的定义和运算 测试题
-综合实例
--综合实例
-实验六(上)
--实验六上
-指针与数组
--指针数组
--指针与数组 测试题
-指针与函数
--指针类型的函数
--指向函数的指针
--指针与函数 测试题
-对象指针
--对象指针
--对象指针 测试题
-动态内存分配
--动态内存分配 测试题
-智能指针
--智能指针
-vector对象
--vector对象
--vector对象 测试题
-对象复制与移动
--移动构造
--对象复制与移动 测试题
-字符串
--C风格字符串
--string类
--字符串 测试题
-第6章小结
--第六章小结
-综合实例
--综合实例
-实验六(下)
--实验六(下)