C++知识整理 - 类的引入

本文详细介绍了C++中的结构体,包括初始化、引用、数组、指针、链表、引用作为函数参数和动态内存管理。此外,还探讨了枚举类型及其使用,以及typedef声明新类型名的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主要内容

1)结构体变量初始化

2)引用结构体变量

3)结构体数组

4)指向结构体变量的指针

5)链表

6)用结构体变量的引用作函数参数(效率最高的传递方式)

7)动态分配和撤销存储空间


 

C++允许用户声明自定义类型(Undefined Type,UDT),包括结构体(structure)类型、共用体(union)类型、枚举(enumeration)类型、(class)类型。

C++的类(class)类型就是在结构体类型基础上扩充发展起来的。


 

结构体

sturct是声明结构体类型的关键字。大括号内是结构体中全部的成员,由它们组成一个特定结构体。每一个成员也称为结构体中的一个,所以成员表又称域表。

结构体相当于一个模型,不占用存储空间

本文件需要用到某个结构体类型时,可以用#include指令将包含结构体声明的文件包含到本文件中。如: #include <file1.cpp>

 

1)结构体变量初始化

 

2)引用结构体变量

1. 赋值

2. 引用变量的成员

“.”为成员运算符,在所有运算符中优先级最高

变量的成员只能单独输入或者输出,但可以同时赋值。

 

3)结构体数组

 

4)指向结构体变量的指针

 

5)链表

链表是一种常见的数据结构。在结构体中,将下一个结点的地址放到前一个结点的成员next(命名习惯)中,这样可以方便产生一系列的变量(对象)。

例如:

#include <iostream>

using namespace std;

struct Student

{

    int num;

    Student * next;                      /*next符合命名习惯*/

};



int main()

{

    Student a,b,c,* head,* p;            /*head符合命名习惯*/

    a.num = 1001;b.num = 1002;c.num = 1003;

    head =&a;

    a.next = &b;b.next = &c;c.next = NULL;

    p = head;

    do

    {

        cout<<p->num<<endl;

        p = p->next;

    } while(p != NULL);

    return 0;

}

 

6)用结构体变量的引用作函数参数(效率最高的传递方式)

#include <iostream>
using namespace std;

struct Student
{
	int num;
};

void print(Student &);

int main()
{
	Student a = {1001}; 
	print(a);
	return 0;
}

void print(Student & stu)
{
	cout<<stu.num<<endl;
}

 

7)动态分配和撤销存储空间

C++提供了newdelete运算符来动态分配和撤销空间,使用方式如下:

//开辟一个存放整数的存储空间,返回一个指向该空间的地址(指针)

new int;

 

//开辟一个存放整数的空间,并赋初值为100,之后将该空间的地址赋给指针变量

int *p = new int(100);

 

//开辟一个存放长度为10的字符数组的空间,并将数组首元素的地址赋给指针变量

char *p = new char[10];

 

//撤销变量的空间

delete p;

 

//撤销数组的空间

delete [ ] p;

 

例子:

int main()

{

    Student * p;

    p = new Student;

    p->num = 1001;

    cout<<p->num<<endl;

    delete p;

    return 0;

}

 

枚举类型

所谓“枚举”是指将变量的值一一列举出来,变量的值只能在列举的值域里面取。

 

声明枚举类型用enum开头。例如:

enum weekday {sun,mon,tue,wed,thu,fri,sat};

花括号中的元素称为枚举元素或枚举常量。

 

声明了枚举类型后就可以用它来定义变量

weekday workday,weekend;

当然,我们也可以在声明枚举类型的同时定义变量,也可以在定义变量的同时赋初值。

 

需要注意的是,枚举元素作为常量是有值的。编译系统默认将枚举元素按顺序从0开始往后赋值。如执行语句

workday = mon;cout<<workday;

输出的结果将会是1,而不是字符串mon。

 

除此之外,我们还可以把枚举元素赋给整型变量。

先对整型变量(顺序号)进行处理,再利用强制类型转换处理枚举类型变量。

虽然可以在声明枚举类型时指定枚举元素的值,但是这样书写会比较混乱,不建议。

 

枚举值可以按整数比较规则比较大小,且排列在前的枚举元素大于后面的枚举元素。如:

if(workday == mon) { }

 

在上例中,虽然workday的值是一个整数,但我们并不能将一个整数直接赋给workday,需要用到强制类型转换

workday = weekday(1);

作用是将weekday中顺序号为1的枚举元素赋给workday,相当于

workday = mon;


 

用typedef声明新的类型名

 

1)用typedef声明一个新的类型名来代替已有的类型名

如:

typedef int INTEGER;

typedef float REAL;

 

2)用typedef对一个结构体类型声明新名字

如:

typedef struct

{

int num;

} NUMBER;

 

3)用typedef声明一个新的类型名

1. 声明ARR为一个包含100个元素的整型数组,并用ARR定义数组

typedef int ARR[100];

ARR a,b,c;  //这样定义会更加方便

 

2. 声明STRING为字符指针,并用STRING定义指针和指针数组

typedef char * STRING;

STRING c,s[10];

 

3. 声明FUCP是函数指针,函数返回值为整型。

typedef (* FUCP)();

FUCP p;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值