寒假学习计划

放大招了==>MOOC_click_me


理由

  • 封面颜值高
  • 2W+的选课量
  • 已结课
  • 内容涵盖比较广

大纲

moocimooc一起学习
感觉imoocmooc好用,安利一波~

另外抱着侥幸的心理真的在图书馆找到了C++prime,省了好多钱,买皮肤买皮肤:)

  • 书和视频结合着一起使用1+1>2

详细计划

之前就掌握了C++的一个大概,然并不会写,最多cin、cout、string一波,借这个寒假深入学习吧。
每天是否学习和学习时间都不是固定的,因此很难确定一个精确到日的计划,我就偷懒更新每天完成的进度吧😝

<02/06 time_21:20>

第25讲 类的定义

  • 1.定义类及成员访问控制
  • 2.类的数据成员、类的成员函数、类的数据声明

<02/07 time_19:34>

第26讲 对象的定义和使用

  • 1.对象的定义及对象动态建立和释放
    Notes:
    用new运算动态分配得到的对象是无名的,它返回一个指向新对象
    的指针的值,即分配得到是对象的内存单元的起始地址。程序通过
    这个地址可以间接访问这个对象,因此需要定义一个指向类的对象
    的指针变量来存放该地址。显然,用new建立的动态对象是通过指
    针来引用的。
    在执行new运算时,如果内存不足,无法开辟所需的内存空间,
    C++编译器会返回一个0值指针。因此,只要检测返回值是否为0,
    就可以判断动态分配对象是否成功,只有指针有效时才能使用对象
    指针。
    Notice:
    new建立的动态对象不会自动被撤销,即使程序运行结束
    也是如此,必须人为使用delete撤销。
    Tips:
    动态分配内存的一般形式:
Point *p; //定义指向Point对象的指针变量
p = new Point; //动态分配Point对象
  • 2.对象成员的引用、对象的赋值、对象的指针
    对象赋值的说明:
    如果对象的数据成员中包括动态分配资源的指针,按赋
    值的原理,赋值时只复制了指针值而没有复制指针所指向的内容。

<02/08 time_20:07>

我电梯还没debug完(╥﹏╥)

<02/09 time_23.:24>

第27讲 构造函数

  • 1.什么是构造函数及构造函数的定义
1#include <iostream>
2 using namespace std;
3 class Cuboid { //Cuboid类表示长方体
4 public:
5 Cuboid(int l,int h, int d); //构造函数
6 int volumn() { return length*height*depth; } //计算体积
7 private:
8 int length,height,depth; //长、高、深
9 };
10 Cuboid::Cuboid(int l,int h,int d) //外部定义的构造函数
11 {
12 length=l, height=h, depth=d; //初始化数据成员
13 cout<<"Cuboid: "<<"L="<<l<<",H="<<h<<",D="<<d<<endl;
14 }
15 int main()
16 {
17 Cuboid a(1,2,3); //定义长方体对象a,调用构造函数初始化
18 cout<<"volumn="<<a.volumn()<<endl; //输出体积
19 Cuboid b(10,20,30); //定义长方体对象b,调用构造函数初始化
20 cout<<"volumn="<<b.volumn()<<endl; //输出体积
21 return 0;
22 }
23
24  第10行也可以写作:
25  Cuboid::Cuboid(int l,int h,int d) :length(l),heght(h),depth(d)
//带构造函数初始化列表的构造函数

<02/10 time_22:28>

第27讲 构造函数

  • 2.构造函数的重载、带默认参数的构造函数

第28讲 默认构造函数和复制构造函数

  • 1.定义默认构造函数、隐式类类型转换
    为了实现其他类型到类类型的隐式转换,需要定义合适的构造函数。
    可以用单个实参调用的构造函数(称为转换构造函数)定义从形参
    类型到该类类型的隐式转换。
    使用单个参数的构造函数来进行类类型转换的方法可以总结如下:
    ► 先声明一个类;
    ► 在这个类中定义一个只有一个参数的构造函数,参数的类型
    是需要转换的数据类型,即转换构造函数的一般形式为:
    ► 采用转换构造函数定义对象时即进行类型转换,一般形式为:
    类名(const 指定数据类型& obj)
    类名(指定数据类型的数据对象)
  • 2.复制构造函数和合成复制构造函数
    代码示例:
class Point { //Point类
public:
Point() : x(0), y(0) { } //默认构造函数
Point(const Point& r) : x(r.x), y(r.y) { } //复制构造函
数
Point(int a,int b) : x(a), y(b) { } //带参数构造函数
private:
int x,y;
};

Tips:
如果一个拥有资源(如用new得到的动态内存)的类对象发生复制
的时候,若对象数据与资源内容一起复制,称为深复制;若复制对象但未复制资源内容称为浅复制。

<02/11 time_23:17>

忙了一天

<02/12 time_21:14>

电梯推翻重新来过

<02/18 time_14:28>

停更了五天终于回来了

第43讲 文件

  • 1.文件的概念

  • 2.文件的操作

<02/19 time_20:39>

  • 1.析构函数的定义及合成析构函数
    Notice:
    合成析构函数并不删除指针成员所指向的对象,它需要
    程序员显式编写析构函数去处理。
  • 2.何时需要编写析构函数
    深复制

<02/20 time_21:45>

  • 1.对象数组及指向对象的指针
  • 2.成员指针及this指针
    ► 指向对象数据成员的指针变量:
    数据成员类型 指针变量名=初值: int *ptr=&now.hour;
    ►定义数据成员指针:
    数据成员类型 类名::
    指针变量名=成员地址初值: String Data::*ps=&Data::content;
    ►成员函数指针:
    返回类型 (类名::指针变量名)(形式参数列表)=成员地址初值;
    返回类型 (类名::
    指针变量名)(形式参数列表) const =成员地址初值;
    例如“char get() const”成员函数的指针可以这样定义和初始: typedef char (Data::*GETFUNC)(Data::index,Data::index) const; //类型别名GETFUNC
    可以为成员指针使用类型别名,例如:char (Data::*pmf)() const = &Data::get; //指向Data::get() 的成员指针
    这样指向get成员函数的指针的定义可以简化为:GETFUNC pfget = &Data::get; //定义成员函数指针pfget
    Notice:
    成员指针与类的类型和成员的类型相关,它只应用于类的非静态成
    员。由于静态类成员不是任何对象的组成部分,所以静态成员指针
    可用普通指针。

<02/21 time_20:09>

第44讲 向量vector

  • 1.向量的使用
iterator begin(); //返回向量第1个元素为迭代器起始
iterator end(); //返回向量末尾元素为迭代器结束
reverse_iterator rbegin(); //返回向量末尾元素为逆向迭代器起始
reverse_iterator rend(); //返回向量第1个元素为逆向迭代器结束
//----容量capacity----
size_type size(); //返回向量元素数目
size_type max_size(); //返回向量能容纳的最大元素数目(长度)
void resize(size_type sz,T c=T()); //重置向量长度为sz,c填充到扩充元素中
size_type capacity(); //返回向量容器存储空间大小
bool empty(); //测试向量是否为空
void reserve(size_type n); //为向量申请能容纳n个元素的空间
//----元素存取element access----
operator[](size_type n); //返回向量第n个位置元素的运算符,n从0起
at(size_type n); //返回向量第n个位置元素,n从0起
front(); //返回向量第1个元素
back(); //返回向量末尾元素
//----向量调节器modifiers----
void assign(size_type n,const T& u); //向量赋n个u值
void push_back(const T& x); //增加一个元素到向量末尾
void pop_back(); //删除向量末尾元素
//在向量pos处插入n个元素值x,pos从1起
void insert(iterator pos,size_type n,const T& x);
iterator erase(iterator pos); //删除向量指定位置的元素,pos从1起
void swap(vector<T,Allocator>& vec); //与向量vec互换元素
void clear(); //清空向量

第45讲 列表list

  • 1.列表的使用
    用法与vector类似
    List是一个双向链表,因此它的内存空间是可以不连续的,通过指
    针来进行数据的访问,这使得list的随机访问效率比较低,因此list
    没有提供[]运算符的重载。但list可以很好的支持任意地方的插入和
    删除操作,只需要移动指针即可。
//----列表调节器modifiers----
void assign(size_type n,const T& u); //列表赋n个u值
void push_front(const T& x); //插入一个元素到表头
void pop_front(); //删除表头元素
void push_back(const T& x); //增加一个元素到表尾
void pop_back(); //删除表尾元素
//----列表运算operations----
void remove(const T& value); //删除列表中值与value相同的所有元素
void remove_if(Predicate pred); //删除列表满足条件的元素
void unique(); //删除列表重复值
void merge(list<T,Allocator>& x); //合并列表x,列表必须有序
void sort(); //列表排序
void sort(Compare comp); //列表按comp关系比较排序
void reverse(); //列表逆序

<02/22 time_22:11>

第46讲 队列(queue)和栈(stack)

  • 1.队列(queue)

  • 2.栈(stack)

第23讲 预处理命令

  • 1.什么是预处理命令及宏定义

Notice:
括号很重要
Notes:
#运算符的作用是文本参数“字符串化”,即出现在宏定义字符文本的#把跟在后面的参数转换成一个c++字符串常量

#define PRINT_MSG1(x) printf(#x);
#define PRINT_MSG2(x) printf(x);
PRINT_MSG1(Hello World); //正确
PRINT_MSG1("Hello World"); //正确
PRINT_MSG2(Hello World); //错误
PRINT_MSG2("Hello World"); //正确

##运算符的作用是将两个字符文本连接成一个字符文本,如果其中
一个字符文本是宏定义的参数,连接会在参数替换后发生。

#define SET1(arg) A##arg=arg;
#define SET2(arg) Aarg=arg;
SET1(1); //宏替换为 A1=1;
SET2(1); //宏替换为 Aarg=1;
  • 2.文件包含和条件编译

<02/23 time_21:25>

第22讲 自定义数据类型的应用——链表

  • 1.链表的概念和分类
  • 2.链表的运算

TO BE CONTINUED

posted @ 2018-02-06 21:23  Elis  阅读(203)  评论(0编辑  收藏  举报