1、双向链表的初始化
srand((unsigned int)time(NULL));
Double_Linklist mylist(10);
Node *head = new Node;
Node *p = NULL;
Node *p1 = NULL;
for (int i = 1; i <= 10; i++)
{
int a = rand() % 10;
if (i == 1)
{
head->Key = i;
head->Value = a;
head->next = NULL;
p1 = head;
}
else
{
p = new Node;
p->Key = i;
p->Value = a;
p->next = NULL;
p1->next = p;
p1 = p;//下次进入循环时,就是p自身的next=new出来的新节点,等效出来就是续链子
}
}
mylist.print_list(head);
delete p;
注意事项:①头节点唯一,且只能被复制,不能二次赋值
②后续节点要与头节点关联,而且还要保证一个接一个不能断
③p所需的node空间必须随用随创建
出现无限打印的错误原因:1.先添加节点,再设置头节点
2、指针
//指针p里保存的是数据的地址
//指针定义;
int a = 10;
int *p = &a;
cout << "a的地址 = " << &a << endl;
cout << "指针p = " << p << endl;
//指针的使用 通过指针间接的访问或者修改内存的内容,
//p指向内存的地址,*p指向内存的内容
*p = 1;
cout << "a = " << a << endl;
cout << "*p = " << *p << endl;
//指针所占内存空间
//32位操作系统,占4个字节;64位操作系统,占8个字节,
//且只和操作系统位数有关,不与数据类型有关
cout << "指针所占内存空间 = " << sizeof(int *) << endl;
//空指针:指针变量指向内存中编号为0的空间
//空指针用于给指针变量进行初始化
int *p1 = NULL;
/*但空指针是不可以进行访问的
内存编号为0-255为系统占用内存,不允许用户访问
野指针
野指针是指指针变量指向非法的内存空间,即没有事先申请内存空间,却直接访问这个内存空间
因此空指针与野指针都不可以使用/访问
*/
/*const修饰指针--常量指针
const int *p=&a;常量指针
特点:指针指向即指针所指内存地址可以修改
但是指针指向的值即内存所存数据不可以被修改
*p=20;❌
p=&b; ✔
const修饰常量--指针常量
int * const p =&a;指针常量
特点:指针指向即指针所指内存地址不可以修改
但是指针指向的值即内存所存数据可以被修改
*p=20;✔
p=&b; ❌
const修饰指针和常量
const int * const p=&a;
指针指向即指针所指内存地址不可以修改
指针指向的值即内存所存数据不可以修改
*p=20; ❌
p=&b; ❌
3、结构体做函数参数
void print_hero(struct Hero heroArray[], int len);
void swap(int &a, int &b)引用传递,异或交换
{
a ^= b;
b ^= a;
a ^= b;
}
void Weather_cast(string w="Sunny")//实时显示时间
{
time_t t = time(0);
char tmp[64];
strftime(tmp, sizeof(tmp), "%Y/%m/%d %X \n%A", localtime(&t));
cout << tmp << "today is weather" << w << endl;
}
int(*p)[4] = new int[3][4]{ {0} };
4、继承中的多态
静态多态(编译阶段绑定地址):函数重载及运算符重载
动态多态(运行阶段绑定地址):派生类与虚函数
1.父类中有虚函数(virtual),
2.子类重写父类中的虚函数,
3.父类中的指针或引用指向子类中的对象。
本质:
父类中加入virtual关键字后,使得父类内部结构发生变化,生成一个虚函数指针,并同时指向一个虚函数表,表里记录着虚函数的入口地址,而父类指针接收子类对象时,调用的重写函数会指向子类对应的虚函数表,从而调用子类函数的入口地址
如果类中包含一个纯虚函数,就无法实例化对象,称为抽象类 virtual void test()=0;
抽象类的子类必须要重写父类中的纯虚函数,否则也属于抽象类
如果子类中具有指向堆区的属性,需要在父类析构函数加virtual,即虚析构,来调用子类析构函数
纯虚析构:声明与实现都要有类内声明,类外实现
多态即向上类型转换,安全