C++复习专题

第五章 数组

  • 数组的定义、索引和排序法的使用
  • 定义
int a[5] = {1,1,1,1,1};//一维数组的定义,**必须**指定大小或者长度,在必要时需要初始化。
int b[][5];//二维数组的定义,第一维度大小可以省略,但第二维度必须指定,可用{}进行初始化。
  • 应用
    用数组名做参数,不需要多余的操作,直接将数组传入函数中
    void myFun(int array [])
    {
    }
    //已有函数 myFun
    
    ······调用·······
    int a[5] = {1,1,1,1,1};
    myFun(a);//直接用数组名传递
    //已有数组a
    

第六章 指针

//指针需要清楚一个概念
int *p = &a;
//等价于
int *p;
p = &a;
//p称为指针变量,而不是*p,指针指针变量中存的都是地址
//&在这里表示取地址符,即取a的地址并通过赋值表达式赋给左边的指针变量p
//此时p中就存了a的地址,而通过*就可以访问这个地址存的数据,*p代表了p所指向的地址对应的值,即a的值

//指针可以访问数组元素
int a[5] = {1,1,1,1,1};
int *p = a;
//则*(p) === a[0]  *(p+1) === a[1],以此类推。
  • 引用
    引用是一种特殊的对变量的操作手法,如果a引用b,二者就相当于同呼吸共命运了,一方发生变化,另一方随即改变,因为他们本身就是共用一块内存。故在传参时,常常使用引用的方式,将函数内需要的发生了变化的变量不需要返回,只需引用的方式传参,该变量就会随函数内变化而变化。

第七章 结构体

(*p).成员名等价于p->成员名

  • new和delete
    new 类型 [初值];
    delete 指针变量;//对变量
    delete [] 指针变量;//对数组。数组名本身就相当于一个指针,故可以直接delete。

第八章 类和对象的特性

  • 面向对象的基本特点有三:继承、封装、多态!!!!。有时候要加上抽象
  • 类和对象的关系
    类是对象的抽象,对象是类的实体/具体实例。
class 类名
{
	类型 成员变量名;
	类型 函数名(参数项);
};//一定要有分号!!!!!!!
  1. 在定义对象的时候会调用构造函数。
  2. 没有定义构造函数就调用默认的构造函数。
  3. 在具有多个构造函数时,构造函数之间不能存在二义性,然后在定义对象时会调用与定义方法对应的合适的构造函数。

第九章 怎样使用类和对象

对象的初始化
  1. 不可以在类内直接对成员变量赋值初始化,只是声明
  2. 可以用类似结构体变量的方式在定义对象时初始化,用{},但前提是只能对公用变量操作。
  3. 用构造函数对想要初始化的数据成员初始化。
  • 参数初始化表
    类名::构造函数名([参数表]) : [初始化表] { }
Box::Box(int h,int w,int len):height(h),width(w),length(len){ }
  • 默认参数的构造函数
    Box(int,int h = 10);
    **注:**这个地方好像是只能在参数表的右侧有,默认参数,即多个参数的情况下,不能出现默认参数的右边还有非默认参数~啊行吧,说不清了 我慌了。。。
成员函数

可以在类内声明时同时定义,也可以在类内声明,类外定义。前者与普通定义方式无二,后者在类内正常声明,在类外定义时基本格式为:

函数类型 类名::函数名(参数项) { 构造函数体 }

析构函数

就说一点!!!

  • 先构造的后析构,后构造的先析构,相当于一个栈结构,先进后出。
this指针

指向本类对象的指针,它的值是当前被调用的成员函数所在对象的起始地址。也就是说通过这个指针就可以访问所在对象的所有成员。
如有成员变量a,则可以,this->a或者(*this).a两种方式都可以访问成员变量a

指向对象的常指针

将指针变量声明为const,指针变量保持为初值,不能改变,也就是指向的位置不能变。

指向常对象的指针变量

const 类型名 * 指针变量名;

  1. 常变量只能由指向常变量的指针变量指向它。
  2. 指向常变量的指针除了可以指常变量,也可以指未带const的变量,但是不能通过指针改变该变量的值
友元函数
  • 普通函数
    类内在函数声明前加上friend关键字,类外按照普通函数的方式去定义,但是其本身可以访问类内的私有成员。
//类内
friend void a();
//类外
void a(){}
  • 友元成员函数
//Data类内将Time类的函数声明为友元函数
friend void Time::display();
//类外仍然照常
void Time::display(){}
类模板

这个简单看一下吧,会定义就行

第十章 运算符重载

  • 重载的含义就是一名多用
  • 一般形式:函数类型 operator 运算符(形参表){ 对运算符的重载处理 }
  • 规则(了解)
    1. 不允许有新的运算符,只能改变已有的
    2. 不能重载的运算符只有5个,成员访问运算符(.),成员指针访问运算符(*),域运算符(::),长度运算符(sizeof),条件运算符(?:)
    3. 不论怎么重载,操作数不变,单目重载仍是单目,双目重载还是双目。后面会出现重载+,-等运算符的时候,有时候一个操作数有时候俩,这是因为这些运算符即可以作为单目运算符,也可以作为双目运算符。
    4. 重载不改变优先级。比如先算乘除再算加减,不会因为重载的加入,改变运算优先级。
    5. 重载不改变结合性,赋值=本来是自右至左,重载完仍然是那样。
    6. 重载运算符的函数不能有默认参数,否则不明确的参数个数与第三点矛盾。
    7. 重载运算符必须和自定义类型的对象一起使用,其参数至少有一个是类对象
    8. 理论上可以将运算符重载为任意操作,但比如把<运算符重载为“大于”运算,可行是可行,但可读性降低,还会让人感觉莫名其妙。
  • 就+来说,当写成类内重载函数时,只需要一个参数,当写为类外或友元时需要两个参数。
    流插入和流提取运算符的重载 我记得去年好像考了一个

第十一章 继承和派生

提高重用性

  • 以不同方式继承时,子类对父类的访问属性表要记
  • C++支持多重继承,即一个派生类继承于多个基类,各基类之间用逗号分隔开
  • 派生类初始化时,可以调用基类的构造函数,通过参数初始化列表对基类成员进行初始化。
  • 虚基类。以虚基类的方式继承,在继承间接共同基类时只保留一份成员,防止二义性。

第十二章 多态性与虚函数

静态多态:函数重载。
动态多态:利用虚函数实现。

多态性的含义!!!!
  • 向不同的对象发送同一个消息,不同的对象在接受时会产生不同的行为或方法。
虚函数的作用

在基类中virtual声明了一个虚函数fun,在派生类声明了一个函数fun,用派生类定义一个对象a,a.fun()调用的是派生类中的函数,而不是基类的,但如果不加虚函数,会调用基类的同名函数。

纯虚函数

virtual 函数类型 函数名(参数列表) = 0;

抽象类
  • 抽象类不可定义对象,它生而用来继承派生。
  • 只要有纯虚函数,就是抽象类,但如果所有的方法都被实现,那么就不是抽象类,就可以派生子类。

第十三章 输入输出流

p428 对二进制文件的操作

  • 学会定义包含简单成员变量的结构体和类
  • 学会定义对象数组并初始化。
  • ofstream和ios::binary,学会二进制读写文件的方式。这个我记得也考了。。。

差不多就这样。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值