本人主要针对自己C++知识的盲点进行选择性的学习,系统的学习请看具体的参考资料 https://www.bilibili.com/video/BV1Hx411U7xL?p=3
01 :函数指针
定义: 类型名( *指针变量名)(参数类型1, 参数类型2, …)*
例如:int (*pf)(int, char)
使用:函数指针名(实参表)
例如:pf = PrintMin; pf(x, y);
应用:C快速排序任意类型数组:qsort库函数
void qsort(void *base, int nelem, unsigned int width, int(* pfCompare)(const void *, const void *)
函数需要以下四个参数:
数组的起始地址:base
数组元素个数:nelem
数组元素大小:width
排序前后规则:int(* pfCompare)(a, b)
其中,返回值包含以下三种情况:
负整数:a在前,b在后;
0:哪个参数在前都可以;
正整数:a在后, b在前。
#include <strio.h>
#include <stdlib.h>
int MyCompare(const void * elem1, const void * elem2)
{
unsigned int * p1, * p2;
p1 = (unsigned int *) elem1; // "* elem1" 非法
p2 = (unsigned int *) elem2; // "* elem2" 非法
return (*p1 % 10) - (*p2 % 10)
}
#define NUM 5
int main()
{
unsigned int an[NUM] = {8, 123, 11, 10, 4};
qsort(an, NUM, sizeof(unsigned int), MyCompare);
for(int i = 0; i < NUM; i++)
{
printf("%d", an[i]) // output: 10 11 123 4 8
}
return 0;
}
02: 命令行参数
Linux 系统下是命令行参数运行程序;window也有命令行运行程序,同时按住Window+R, 并输入cmd,命令行出现如下:
命令行程序示例:
如果你的电脑里面有 notepad sample.txt 这个程序,你可以把它输入到命令行
然后会有程序里面对应的输出,这是用命令行的形式,也可以用C语言软件去编译
如何获得命令行参数 sample.txt ?
举例说明 !
其中argc = 6; 然后输出对应的字符串
03: 引用
引用后,如果引用变量改变,被引用的变量也会变,两个变量其实就是一个变量了
注意两者的区别 !,C C++
04: const 关键字和常量
要点:避免使用define
, 因为const
有类型方便检查。
错误1:不可通过常量指针修改其指向的内容;
错误2:strcpy()
的第一个参数类型为char *
,而p
为const char *
,不能将const char *
类型的指针赋给char *
类型。
05: 动态内存分配
要点:
- C语言:通过
malloc
分配内存。C++:new
关键字实现动态分配内存。 - 分配变量:
P = new T;
,其中T
为任意类型名。 - 分配数组:
P = new T[N]
目的:节省空间,实际需要多少空间就动态定义多少空间
06: 内联函数和重载函数
函数重载,便于记忆,c语言中是没有的,很好的存在! 调用时注意变量的类型
07: 函数的缺省参数
在看程序的时候确实出现过这样的情况,但是不懂为什么,早看到这个视屏就好了
08: 面向对象程序设计
结构化程序设计的弊端
面向对象程序设计
含义:类,相当于模板。
09: 面向对象语言发展历程
10: 从客观事物抽象出类的例子
- 实例化对象
- 类成员的访问:
- 对象名.成员名
- 指针->成员名
- 引用名.成员名
11: 类成员的可访问范围
具体的例子
12:内联成员函数和重载成员函数
避免语义歧义
13:构造函数
14:复制构造函数
15:类型转换构造函数
16:析构函数
具体的例子
17:静态成员变量和静态成员函数
理解:CRectangle A, B;
改变A.静态 值 也会改变 A.静态值
举例说明
18:成员变量和封闭类的概念
19:友元
友元函数
友元类:不能继承,不能传递
20:this 指针
21:常量对象,常量成员函数和常引用
22:运算符重载的基本概念
23:赋值运算符的重载
24:长度可变的整形数组类
25:流插入运算符和流提取运算符的重载
26:自增 自减运算符的重载
27:继承和派生
28:复合关系和继承关系
29:多态和析构函数的基本概念
30:使用多态的游戏程序实例
31:文件操作
32:函数模板
两个模板,函数类型的不同
T类型的
但是如果参数的类型不一样!
33:类模板
34:string类
35:输入和输出
36:1-标准模板库STL概述
具体的例子:
37:2-标准模板库STL概述
38:顺序容器Vedtor
39:List 和 Deque
40:函数对象
41:Set 和 multiset
42:Map 和 multimap
43:容器适配器
44:算法
45: 强制类型转换
感谢: https://blog.csdn.net/qipeng_master/article/details/88124357