最新15 结构体、类和对象(1).ppt
- 格式:ppt
- 大小:1.19 MB
- 文档页数:21


1 第11章 结构体、联合体与位运算
本章介绍结构体、联合体及枚举类型等三种新的构造型数据类型以及位运算的基本方法,包括结构体的含义;结构体类型变量的定义、引用及初始化方法;结构体数组的定义和数组元素的引用;结构体类型指针的概念及链表的基本操作方法;联合体的含义;联合体类型变量的定义方法;枚举类型的定义; TYPEDEF的作用和位运算的基本方法等。
11.1 结构体类型
通过前面有关章节的学习,我们认识了整型、实型、字符型等C语言的基本数据类型,也了解了数组这样一种构造型的数据结构,它可以包含一组同一类型的元素。但仅有这些数据类型是不够的。在实际问题中,有时需要将不同类型的数据组合成一个有机的整体,以便于引用。例如,在新生入学登记表中,一个学生的学号、姓名、性别、年龄、总分等,它们属于同一个处理对象,却又具有不同的数据类型。如图11-1。每增加、删减或查阅一个学生记录,都需要处理这个学生的学号、姓名、性别、年龄、总分等数据,因此,有必要把一个学生的这些数据定义成一个整体。
学 号
(整型) 姓 名
(字符型) 性 别
(字符型) 年 龄
(整型) 总 分
(实型)
11301 Zhang Ping F 19 496.5
图11-1
虽然数组作为一个整体可用来处理一组相关的数据,但不足的是,一个数组只能按序组织一批相同类型的数据。对于一组不同类型的数据,显然不能用一个数组来存放,因为数组中各元素的类型和长度都必须一致。为了解决这个问题,C语言中给出了另一种构造数据类型——“结构体”。
11.1.1 结构体类型与结构体变量
结构体是一种构造类型,它由若干“成员”组成。每一个成员可以是一个基本数据类型或者又是一个构造类型。结构体既然是一种构造而成的数据类型,那么在使用之前必须先定义它,如同在调用函数之前要先定义或声明一样。定义一个结构体类型的一般形式为:
struct 结构体名
{ 成员1 类型1;
C语言结构体构造函数
简介
在C语言中,结构体(struct)是一种自定义的数据类型,用于将不同类型的变量组合在一起形成一个新的复合数据类型。结构体构造函数是一种用于创建并初始化结构体变量的方法,类似于其他面向对象编程语言中的构造函数,用于为结构体变量分配内存空间并初始化其成员变量。
本文将详细介绍C语言中结构体构造函数的概念、使用方法以及注意事项。
结构体构造函数的定义和作用
结构体构造函数是一种特殊的函数,用于创建并初始化结构体变量。它的作用是方便地为结构体变量分配内存空间并初始化其成员变量,避免手动分配内存和逐个初始化成员变量的繁琐过程。
结构体构造函数的定义与普通函数类似,但其函数名与结构体类型相同,没有返回类型,并在函数体内部完成了分配内存和初始化成员变量的过程。例如:
typedef struct {
int age;
char name[20];
} Person;
Person createPerson(int age, const char* name) {
Person p;
p.age = age;
strcpy(, name);
return p;
}
在上述代码中,createPerson函数是一个结构体构造函数,用于创建并初始化Person类型的结构体变量。它接受两个参数,分别是年龄和姓名,将这些值分别赋给p的成员变量age和name,最后返回创建好的结构体变量p。 使用结构体构造函数创建结构体变量
使用结构体构造函数创建结构体变量非常简单,只需要调用结构体构造函数并传入相应参数即可。以下是使用上述createPerson函数创建Person类型结构体变量的示例:
Person person1 = createPerson(25, "Tom");
在上述示例中,createPerson函数被调用并传入了25和”Tom”作为参数,返回的结构体变量被赋给了person1。
C语言结构体(struct)常见使用方法
基本定义:结构体,通俗讲就像是打包封装,把一些有共同特征(比如同属于某一类事物的属性,往往是某种业务相关属性的聚合)的变量封装在内部,通过一定方法访问修改内部变量。
结构体定义:
第一种:只有结构体定义
[cpp] view plain copy
1. struct stuff{
2.
char job[20];
3. int age;
4. float height;
5. };
第二种:附加该结构体类型的“结构体变量”的初始化的结构体定义
[cpp] view plain copy
1. //直接带变量名Huqinwei
2. struct stuff{
3. char job[20];
4. int age;
5. float height;
6. }Huqinwei;
也许初期看不习惯容易困惑,其实这就相当于:
[cpp] view plain copy
1. struct stuff{
2. char job[20];
3.
int age;
4. float height;
5. };
6. struct stuff Huqinwei;
第三种:如果该结构体你只用一个变量Huqinwei,而不再需要用
[cpp] view plain copy
1. struct stuff yourname;
去定义第二个变量。
那么,附加变量初始化的结构体定义还可进一步简化出第三种:
[cpp] view plain copy
1. struct{
2. char job[20];
3. int age; 4. float height;
第八章 类和对象
一、选择题
1. 下列特性中,C与C++共有的是( ) A. 继承 B. 封装 C. 多态性 D. 函数定义不能嵌套
2. 一般情况下,将( )函数说明为内联函数。
A. 函数的代码量小,调用次数少 B. 函数的代码量小,调用次数多
C. 函数的代码量大,调用次数少 D. 函数的代码量大,调用次数多
3. 不能作为函数重载判断依据的是( ) A. 返回类型 B. const C. 参数个数 D. 参数类型
4. 下列说法中正确的是( )
A. 在函数参数定义中可以使用const说明符,其值在函数体内不可改变
B. 在函数参数定义中可以使用const说明符,但必须指定缺省值
C. 在函数参数定义中可以使用const说明符,但只能有一个参数使用const D. 在函数参数定义中不可以使用const说明符
5. 已知函数float fun(float)是类A的成员函数,fp是指向该函数类型的指针,但fp不
是类A的成
员,则下列操作正确的是( )
A. fp=fun; B. fp=fp(3.5); C. fp=A::fun; D. p=A::fun(3.5); 6. f()函数是类的一个常成员函数,它有一个int型参数,并且返回类型为int。下列对该
常成员函
数进行声明的选项中,正确的是( )
A. int f(int)const; B. const int f(int); C. int f(const int); D. const int f(const
int); 7. C++提供的可有效分配对象空间的运算符是( )
A. delete B. new C. pos D. auto
8. 下面关于new运算符的描述中错误的是( )
A. 使用new创建对象时必须定义初始值
B. 使用new创建对象时会调用类的构造函数 C. new可以用来动态创建对象和对象数组
D. 使用new创建的对象可以使用delete删除