C语言的学习到今天已经有了一段时间,下面对最近的学习进行一次全面的总结:
一、学过的知识
1、递归
2、复杂数据类型(结构体、指针运用等)
3、类和对象
4、运算符重载
二、具体知识的运用方法
1、递归:
(1)程序直接或间接调用自身的编程技巧称为递归算法。
(2)递归算法通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。其基本思想是把问题层层分解,把一个不能或不好解决的大问题转化为一个或几个小问题,再把这些小问题进一步分解成更小的小问题,最小问题可以直接解决。
(3)递归方法:找出大规模问题与小规模问题的关系,这样通过递归使问题的规模逐渐变小。 2)设置边界、控制递归:找出停止条件。 3)设计函数、确定参数:设计函数体中的操作及相关参数。
(4)我理解的递归算法就是一个大事化小小事化了的办法,通过解决一个一个的小事情汇总来解决最后的大问题方法
2、复杂数据类型:
(1)结构体和枚举:使用结构体之前必须要先声明,可以将结构体类型和变量定义在一起,格式:
struct 类型名{
数据类型1 成员名1;
数据类型2 成员名2;
… }变量名;
(2)标准库:
String字符串是对象,可以支持字符串的各类操作
其中,两个字符串对象可以支持运算符的连接,得到一个新的字符串,其中必须要有一个是string类型
String类型支持for循环,可以进行循环操作
(3)指针和引用:
内存的直接或间接使用可以借用指针
指针持有一个对象的地址,可以通过指针间接操纵,特别注意的是每个指针都有自己特定的类型
格式:类型 *指针变量;
指针在存放指定类型对象的地址时,要获取对象地址使用取地址运算符&
指向一个对象的指针有两个存储单元与之相关
一个是指针自己的存储单元,里面存放着所指对象的地址;
另一个就是指针指向的对象的存储单元,里面存放该对象的值。
可以定义存放指针对象的地址的指针。
指针可以指向另一个指针
空指针的两种方法,指向0或者NULL
同类型指针可以进行比较运算,并且指向数组元素的指针可以进行自增自减运算
Void指针为通用指针,但是只能进行传地址或者进行比较
指针可以构建链表、动态分配对象、作为函数参数
动态分配空间动态相比静态更加灵活
New运算符:
一般将运算符返回地址保存在指针变量中以便直接访问堆上对象
单个对象可以直接加类型,多个对象使用数组,分配空间时运用指针
Delete运算符:
相当于删除操作,new运算符占用的大量空间可以运用delete运算符进行删除防止占用空间,需要注意的是,delete的元素相当于删除不存在,再次调用会产生错误
Const限定指针:
被const限定的指针不可进行改变操作,其内存值也不可以改变
Const可以指向非const,反之不可以
3、类和对象:
(1)类中包含属性跟行为,其中属性以数据表示,行为通过函数实现
格式:
class 类名
{
public:
公有数据成员和成员函数;
protected:
保护数据成员和成员函数;
private:
私有数据成员和成员函数;};
如果不声明自动默认为private
函数格式:
返回值类型 类名::成员函数名(参数表)
{
函数体
}
只有定义了类以后才可以定义类的对象
指针访问用->
(2)函数重载:
用于处理不同数据类型的类似任务
(3)构造函数和析构函数
构造函数是为对象分配空间,对数据成员赋值,请求其他资源,可以进行重载
析构函数没有返回值,也不可以进行重载操作
(4)this指针:
运用的三种情况:
在类的非静态成员函数中返回类对象本身或对象的引用的时候,直接使用 return *this,返回本对象的地址时,return this。
当参数与成员变量名相同时,如this->x = x,不能写成x = x。
避免对同一对象进行赋值操作,判断两个对象是否相同时,使用this指针。
(5)深浅复制:
对于复杂类型的数据成员只复制了存储地址而没有复制存储内容为浅复制,深复制不仅复制了数据成员,也复制了资源。
(6)静态成员为类成员冠以static声明,常成员为用const说明的函数
4、运算符重载:
(1)友元不建议使用
(2)重载运算符可以对运算符做出新的解释但是不可以改变原有语意
(3)最常用的重载自我感觉为输入跟输出的重载:
cin 是 istream 的对象,cout 是 ostream 的对象;
运算符 << 由ostream 重载为插入操作,用于输出基本类型数据;
运算符 >> 由 istream 重载为提取操作,用于输入基本类型数据;
用友元函数重载 << 和 >> ,输出和输入用户自定义的数据类型(重载输出运算符“<<”和输入运算符“>>”只能被重载成友元函数)
三、自我总结:
自己因为是重修,改变了以前的懒散,在刚开始时候还是以为会跟大一一样,从最简单的开始,但是第一节课讲解的递归让我从一开始就没有松懈,在自己好好听了以后竟然发现自己能够听懂老师所讲的知识,而大一的时候这些知识都被自己认定为学不懂学不会而放弃的,到现在为止,两个作业完成的对自己而言是一个较大的突破,自己也进行了很多课下的总结梳理,一个代码往往都是都能想个差不多,但是到了纸面上打程序又是一个阶段,需要特别长的时间,在静态成员跟常成员那里走神了导致有一些没有听懂,自己也会看回放不上,重修了就会打起精神来面对,不跟以前一样懒散,并且感觉在家中网课的方式自己听的比课上认真,没有其他人的打扰等,以后还会继续努力的。