操作系统与网络 2019-2-1

1.复习C++中的知识点

1.1 作用域和命名空间

1.作用域是通过 :: 来进行区分的;
2.全局变量需要使用 :: 来与局部变量进行区分(同名情况下);
3.命名空间是 ANSI C++ 引入的可以由用户命名的作用域,用来处理程序中常见的同名冲突;
4.当只调用头文件而没有打开命名空间时,某些函数是无法使用的。

1.2 函数默认值

1.函数的默认值从右到左(右边有,左边无);
2.函数的默认值不能有间隔,就是一个有,一个没有,下一个又有;
3.默认值在 声明函数 的时候给出;

1.3 函数重载

1.C++允许在同一个作用域有几个同名函数,但是这些同名函数的形参必须不同(参数的个数、类型或顺序);
2.重载函数常用来实现功能类似而所处理的数据类型不同的问题;
3.不能只有函数返回值类型不同。

1.4 malloc/free 和 new/delete 的区别

1.申请内存所在位置不同: new 从 自由存储区 为对象动态分配内存空间, malloc 从 堆上 为对象动态分配内存空间;
2.返回类型安全性不同:new操作符内存分配成功时,返回的是对象类型的指针,类型严格与对象匹配,无须进行类型转换,故new是符合类型安全性的操作符;malloc内存分配成功则是返回void *,需要通过强制类型转换将void *指针转换成我们需要的类型;
3.内存分配失败时的返回值不同:new内存分配失败时,会抛出bac_alloc异常,它不会返回NULL;malloc分配内存失败时返回NULL;
4.是否需要指定申请内存空间的大小:new操作符申请内存分配时无须指定内存块的大小,编译器会根据类型信息自行计算;malloc则需要显式地指出所需内存的尺寸;
5.是否调用构造函数/析构函数:new 和 delete 分别会调用构造和析构;而malloc和free则不会调用构造和析构;
6.是否能够被重载:new 和 delete 可以被重载;malloc和free不允许重载;

1.5 string

1.可以用来进行比较字符串;

1.6 引用

1.引用就是给变量起别名;
2.typedef是给类型起别名;
3.引用的符号:&
4.引用:可以使程序在不同作用域使用同一个变量;
5.与指针的区别:
1)引用定义之后需要进行初始化;
2)引用初始化之后就不能再重新引用其他空间;
3)有空的指针,但是没有空的引用,引用必须引用一个合法的存储单元。

1.7 函数参数的传递方式

1.值传递:不推荐使用,可能导致想修改某个变量的值但实际未修改;当然,若不想修改传入的内容,可以使用值传递;
2.地址传递:若传入的参数是 new 出来的空间,则使用地址传递;
3.引用:修改传入的内容可使用引用,更安全;

1.8 访问修饰符

1.三种: public (在任何一个地方都可以见到)、 private (只有自己可以见到;若成员属性没有访问修饰符,则默认为 private)、 protected (在自己和派生类中可以见到);
2.结构体默认的访问修饰符是 public ;

1.9 构造函数、析构函数

1.构造函数 ,是一种特殊的方法。主要用来在创建对象时初始化对象,即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中;特别的,一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们即构造函数的重载;
2.析构函数:析构函数(destructor)与构造函数相反,当对象结束其生命周期,如对象所在的函数已调用完毕时,系统自动执行析构函数;
3.调用时机:
构造函数:创建对象时进行调用
析构函数:在对象的生命周期结束时自动调用

1.10 对象的种类

1.栈区对象:其生命周期到作用域结束;
2.堆区对象:其生命周期 直到遇到 delete ;
3.全局对象:其生命周期到程序结束;
4.临时对象:其生命周期仅有这一行;

1.11 this指针

1.在每一个成员函数中都包含一个特殊的指针,这个指针的名字是固定的,称为 this ,它是指向本类对象的指针,它的值是当前被调用的成员函数所在的对象的起始地址;
2.this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数;
3.当创建类似 CPerson *p = NULL 的指针时,p可以进行调用函数,但是不可以使用成员变量;
4.成员函数是函数编译期存在,只有一份;
5.不同对象的参数可以在同一个函数中使用,类会自动将调用函数的对象的地址传入函数,传入的指针就是this,指代当前的对象;
6.成员变量和成员函数是由 this 指针进行关联的;

1.12 const成员

1.const成员变量必须在构造函数的初始化列表里进行初始化;
2.const成员函数:不能修改类中的成员属性;
3.常量对象:只能使用常函数,普通函数不能调用;

1.13 类之间的关系

1.依赖:人能够使用电脑进行编码,没有电脑则没办法编码
2.关联:朋友和人的关系
3.聚合:家庭和人的关系
4.组合:人的手和头与人的关系
5.继承:将父类的内容拷贝一份到子类中

6.类之间的关系是为了进行类间的通信
7.强弱关系:依赖 < 关联 < 聚合 < 组合

1.14 继承方式

1.public 继承:public的成员不变,protected的成员不变,private的成员变成不可访问;
2.private 继承:public的成员变成private,protected的成员变成private,private的成员变成不可访问
3.protected 继承:public的成员变成protected,protected的成员不变,private的成员变成不可访问;

1.15 继承的构造与析构

1.先执行父类的构造,再执行子类的构造,再执行子类的析构,再执行父类的析构(类似于栈,先进后出FILO);
2.在一个类B中的成员属性包含另一个类A的对象,A的析构函数有参数,则执行B类的构造函数时必须在初始化列表中指定A的构造函数;
3.在自己类中成员属性不能定义自己类的对象,但是在成员函数中可以定义自己类的对象;

1.16 重载、重写、隐藏

1.17 父类指针指向子类对象

1.优点:父类指针可以指向不同的子类对象,能够提高程序的复用性;
2.却点:不能使用子类中的成员

1.18 多态

1.虚函数:父类的类型有多种形态
2.实现原理:虚函数列表
3.多态用处:当一个功能有不同的实现方式时,需要用到多态
4.纯虚函数:知道有函数,但目前无法确定函数的实现方式
5.接口类:所有函数都是虚函数
6.解决父类指针指向子类对象时无法使用子类中的成员问题;
7.取得虚函数列表里的内容(这里还是不会,因为涉及到函数指针)

1.19 static成员

1.static 成员变量只有一份,所有对象共享,在类外进行初始化
2.静态成员变量在编译期存在
3.static 成员函数中只能使用 static 成员变量

1.20 头文件

1.内联函数:内联函数一般比较短,在程序中直接替换
2…h 头文件中只放成员函数、成员属性的声明,静态成员变量的初始化放到同名cpp文件中;
3.单独的头文件不参加编译;
4.头文件重复包含
解决方法:

// (1)
#ifndef PERSON_H
#define PERSON_H
头文件代码
#endif//PERSON_H

// (2)在开头加上:
#pragma once

5.#ifdef

1.21 重载操作符

1.对象在操作符的左侧则可以在类内或类外进行重载操作符
2.对象在操作符的右侧则必须在类外进行重载操作符
3.若重载的符号需要有结果,使其可以和其他符号继续进行结合,这就要求重载操作符具有返回值

1.22 stl 标准库

1.23 游戏壳

1.24 拷贝构造

1.浅拷贝:类中有默认的拷贝构造函数,即为浅拷贝
2.深拷贝:我们可以重写拷贝构造函数来完成深拷贝的操作

1.25 友元函数

1.允许这个函数去使用类的私有成员

1.26 设计模式

1.单例模式:
2.模版方法

1.27 模版

1.函数模版
2.类模版
3.完成冒泡排序

1.28 容器、迭代器、算法

1.迭代器可以看作一个指针
2.

1.29 序列容器

1.30 关联容器

1.map
2.set
3.hash_map
4.multimap

1.31 动态创建对象

1.32 设计原则

1.33 MFC

1.什么是MFC:

1.34 消息映射表

1.35 MFC 的消息类型

1.标准消息
2.命令消息
3.控件消息
4.自定义消息

1.36 消息的流向

1.标准消息:从子类到父类
2.命令消息:

1.37 截屏工具

1.38 Clean 项目

1.39 进程

1.进程的组成:
2.进程间通信:
3.内存文件映射:
4.内存管理:
5.游戏修改器

1.40 线程

1.线程的组成:
2.创建一个线程:
3.挂起一个线程:
4.恢复一个线程:

猜你喜欢

转载自blog.csdn.net/weixin_42896619/article/details/88187398