广州C/C++培训
达内广州岗顶中心

18087159764

热门课程

c++期末复习的重点内容剖析

  • 时间:2015-11-02
  • 发布:dn
  • 来源:dn

重点内容剖析
一、概述重点
1、面向对象和面向过程的对比:面向对象的分析是基于对象的,面向过程的分析则是基于算法;面向对象的基本构建是类,而面向过程的基本构建是函数/过程;分析方法面向过程是Data Flow Diagram(数据流图)以及伪代码,面向对象是Unified Modeling Language (统一建模语言)
1、面向对象的四个基本特征
1)抽象:过程抽象和数据抽象
2)继承:单继承和多继承(区别于java只有单继承,java的多继承由接口实现)
3)封装
4)多态性:运算符重载和函数重载;定义函数支持动态联遍)
继承和多态为必考内容
2、类是具有相同属性和服务的若干对象集合,属性为静态特性,由数据表达;服务是动态特性,由函数和方法表达。
3、C++程序实现过程:coding-> .cpp->compile->.obj->link->.exe
对于面向对象的特点以及面向对象语言的特点笔者笔者就不在叙述,但还是希望大家能够对面向对象的语言能够有一个深刻理解
二、数据类型
基本数据类型:char(1Byte) 、short(2Byte)、int(4Byte)、float(4byte)、double(8byte)、long double(16byte)、bool(1byte),对于singed以及unsigned添加过后对字宽无影响
自定义数据类型: array(数组)、struct、union、class
三、变量命名的一般规则不做详细说明,提示一下书中提到的两种比较流行的命名变量,一种是全用大小写字母命名变量名,另一种是匈牙利标记法,希望对编程感兴趣的同学设置变量名能够注意这些细节,使我们的程序能够望其文知其义
、掌握常见运算符的优先级,大家记表,记住常用的就好,这个没有什么捷径。在实际编程中对优先级的要求不高,对于有歧义的地方加小括号进行区分就好。
、掌握变量概念下理解赋值与赋初值的区别,变量值与变量地址值的区别,有意义值与无意义区别。
、宏定义与const区别
1、定义常量 如 #define PI 3.1415 和const double 3.1415主要区别是宏定义常量无类型在编译中无法知道数据类型不正确引起的错误,所以在C++编程中一般用const定义的常量
2、#define Area(x,y) x*y 与 int area(int x,int y)结果不一致define Area(x,y) (x)*(y)与一般函数结果一致,原因是宏定义方法代入是只是进行了简单的替换。
、字符串指针与字符数组的区别(这里只引出这个重点,无论对于c还是c++其都是一个不可避免的考点)
1. 字符串指针变量本身是一个变量,用于存放字符串的首地址。而字符串本身是存放在以该首地址为首的一块连续的内存空间中并以‘\0’作为串的结束。字符数组是由于若干个数组元素组成的,它可用来存放整个字符串。

2. 如对字符串指针方式

char *ps="C Language";

可以写为:

char *ps;

ps="C Language";

而对数组方式:

static char st[]={"C Language"};

不能写为:

char st[20];

st={"C Language"};

而只能对字符数组的各元素逐个赋值等等一系列区别
、文件包含命令,提这个主要是因为其在实际编程中运用较多。区别<>与” “,主要是预处理命令时查找相应库的顺序不同。
、注意函数的一些特点比如嵌套定义是非法的,函数之间不是包含关系而是调用关系,函数说明要用原型说明,不可用简单说明(区别于c)等等这些有关函数的概念
、设置函数参数的默认值
1、参数表从右至左,指定默认值参数右边不可出现在没有指定默认值的参数
2、默认参数调用是,则遵循参数调用顺序从左至右,逐个调用
3、默认值一般是全局变量、全局常量,甚至是一个函数,但不可以是局部变量,因为默认参数的调用是在编译时确定的,而局部变量位置默认值在编译时无法确定
十一、区别传值调用(一般形参)与传址调用(形参为指针和引用)
十二、关于内联函数的说明,内联函数不允许有循环和开关等大语句,如内联函数有这些语句,按一般函数处理;内联函数体不宜太大,以1~5行为宜;在类结构中,在类体内定义的成员函数都为内联函数,如果函数体过大,也就失去了内联函数的意义
十三、重载函数
1、重载函数至少要在参数类型,参数个数或参数顺序上有所不同。仅仅哎返回值上有所不同是不够的。
2、不能使用类型定义typedef语句定义的类型名来区分重载函数的参数
3、在定义重载函数时,应注意同名函数要有相同的功能
4、设置默认值会影响重载函数的选择
十四、标识符作用域
十五、(可能会有选择)变量存储类型:auto \register\exrern\static 主要是作用范围,定义和说明的相关情况等
十六、(常考)指针、指针与数组的联合表示、字符数组与字符指针,需要自己理解透彻
十七、区别指向数组的指针 int (*array)与指针数组 int *array[]这是一个改错的常考点
十八、对于引用的概念理解比较容易做选择题的选项,比如引用不可以引用之类,对引用和指针的区别结合书上的内容重点理解;引用做函数参数的传址调用,引用作为函数返回值
这里举一个书上的例题
有这样一个函数
设主函数中有s1=square(5)
定义一个外部变量 int t;
int &square(int i)
{ t=i*i;
return t;
}
其借用一个外部变量将该函数的返回值t直接传递给调用函数的变量。
如把函数改为 return i*i则会产生一个垃圾,因为函数结束后,i会自动释放,对其引用也将无效,可把函数写为 int &square(int &i),此时就不存在这个问题,因为此时实参和形参为同一地址,且返回值为引用的与普通返回值的区别是其调用函数可以在函数体中进行如square(5)++之类的操作
十九、对于结构体和联合在此不做详细说明,只需要大家知道struct是一访问权限默认为public的特殊类,关于class的很多结构都可以与其类比学习。Struct与union的区别,主要是内存方面。
现在终于说到了本书的重点内容,这本书也正是进入了面向对象的内容
二十、对于类的定义格式,类体外定义成员函数的格式。另外需要说明的是
1、为了养成良好的代码风格,对于类的实现部分的成员函数,最好尽量在类体内说明,类体外定义。
2、在类体内运行对成员函数进行定义,但不允许对数据成员进行初始化。
二十一、对于对象的定义以及成员表示,初学者可能会存在一些障碍,没关系只要你会struct,class的表示是一样的,如对象的成员用.对象的指针的成员用->等等
二十二、构造函数和析构函数几点说明
1、如果未定义任何构造哈数,系统会自动生成一个函数体为空的默认构造函数,如果已经定义重载了构造函数,此时需要重载函数体为空的默认构造函数,在程序中定义一个没有给定初值的对象时,系统自动调用默认构造函数创建该对象,当该对象时外部的或静态的,其所有数据化成员初始化为零或空;当对象时auto时,其数据成员无意义,这一点可以结合变量类型一起理解。
2、析构函数无参数,不能够重载,析构函数由系统自动调用。
3、关于new和delete的使用,当用new实例化出来一个对象的时候,可以用delete销毁这个对象。程序就会自动调用析构函数。在析构函数中使用delete时,构造函数中没有new的话调用delete之前先判断delete的对象是否存在。
4、对象的释放顺序与创建顺序正好相反,在相同生存期的情况下,先创建的对象后释放,后创建的对象先释放。
二十三、(必考点)区别class的静态数据成员(static)和常数据(const)成员,静态数据成员的初始化在类体外,常数据成员的初始化在初始化列表(主要是改错考的比较多)
二十四、深刻理解友元函数和友元类(友元函数在重载中比较重要)
二十五、指向对象数组与对象指针数组(改错题和填空题一般都会考)
二十六、常指针
1、地址值是常量的指针:指针地址值不可变,指针所指向的值可以改变
2、所指向的值是常量的指针:指针地址可变
常引用:引用的对象不能改变
常对象:定义常对象要赋初值,且该对象不得改变
二十七、继承的三种方式 (重点掌握哪些为派生类可访问,哪些是派生类的对象可访问的)
1.如果子类从父类继承时使用的继承限定符是public,那么
(1)父类的public成员成为子类的public成员,允许类以外的代码访问这些成员;
(2)父类的private成员仍旧是父类的private成员,子类成员不可以访问这些成员;
(3)父类的protected成员成为子类的protected成员,只允许子类成员访问;
2.如果子类从父类继承时使用的继承限定符是private,那么
(1)父类的public成员成为子类的private成员,只允许子类成员访问;
(2)父类的private成员仍旧是父类的private成员,子类成员不可以访问这些成员;
(3)父类的protected成员成为子类的private成员,只允许子类成员访问;
3.如果子类从父类继承时使用的继承限定符是protected,那么
(1)父类的public成员成为子类的protected成员,只允许子类成员访问;
(2)父类的private成员仍旧是父类的private成员,子类成员不可以访问这些成员;
(3)父类的public成员成为子类的protected成员,只允许子类成员访问;
4、派生类对象对基类成员的访问权限:
(1)对于公有继承,只有基类的公有成员可以被派生类访问,其他成员不能被访问
(2)对于私有继承和保护继承,基类中所有成员都不能被派生类对象所访问
5、派生类对基类的成员的访问权限
(1)对于公有继承,基类中的公有成员和保护成员均可以被派生类访问,而基类的私有成员不能被访问。
(2)对于私有继承和保护继承,也是基类中的公有成员和保护成员可以被派生类访问,而基类的私有成员不能被访问。
二十八、(必考)派生类构造函数调用顺序为基类构造函数、子对象类构造函数、派生类构造函数
难点:如有堆对象,先定义语句,再有new分配内存,此时需要具体考虑new的语句位置,判断构造函数调用顺序此情况时析构顺序无影响//待完善 (对于最后一道编程题也必然有关于继承派生的内容)
二十九、子类型:公有继承是实现子类型的基础,利用子类型给基类赋值
三十、(必考,题型我不能保证)多继承,多继承的多个基类构造函数的执行顺序取决于定义派生类时所指定的各个基类的顺序,而与派生类的构造函数的成员初始化列表中给定的基类顺序无关
三十一、运算符重载
1、不能重载的四种运算符. .* :: ? :
2、(必考)运算符重载的两种形式:成员函数重载和友元函数重载,对于书上的相关例子对照区别,一定要会写,最后的程序题一定会写重载的。成员函数重载和友元函数重载使用是对于单目和双目有所区别…
三十二、(必考)静态联遍和动态联遍
1、静态联编:程序在编译连接阶段进行的联编
2、(重点)动态联编:程序运行时进行的联编,继承是动态联编的基础,虚函数是动态联编的关键,且只有非晶态成员函数才可以说明为虚函数,构造函数不能说明为虚函数,动态联编要求调用虚函数的是基类的对象引用或对象指针,不能是对象,这是动态联编的具体实现方法(这一个基本是所有题型都会考到,尤其是写结果类的,最后一道编程题也会有所涉及)
3、纯虚函数:在一个基类中说明一个纯虚函数,它不对应任何具体实现,该虚函数的实现在它的派生类中(了解,可能有选择题)
4、抽象类:一个抽象类知识有一个纯虚函数,即没有知名任何具体实现的虚函数
5、抽象类用来描述一组子类的共同的操作接口,它用作基类,而完整的实现由子类完成
三十三、(重点)虚析构:能够采用动态联编,可以在运行时选择析构函数,使析构更加彻底
三十四、C++语言中的文件输入输出操作对于编程来说是一项很重要的内容,对于期末考试来说除了常规的输入输出流考到的内容基本上没有,在选择题中有可能涉及,所以对于这一章大家可以对相关的输入输出流对象成员函数基本掌握即可。

好了,本书的考试重点基本已经列完了,此文对于应付期末考试来说是绰绰有余啦,如果说是想从事编程的同学,就要多下些功夫啦~
注:
最后给想要在C++进阶的同学推荐几本书籍
《C++编程思想(第1卷)(第2版)》
《C++Primer Plus》
《算法导论》

上一篇:学霸带你复习C++考试技巧
下一篇:【专业知识】C/C++指针三

C++语言编程的学习

C语言和C++区别 你知道多少

C/C++/JAVA那个更好的作为入门语言

C++语言的15个晦涩特性 由浅入深

选择城市和中心
贵州省

广西省

海南省