C复习资料整理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、引用是别名
int i,j;
int &ri=i; 员运算符
*成员指针运算符
::作用域操作符
?:三目运算符
sizeof()
⏹不可以改变运算符操作数的数目
⏹运算符的优先级不可以改
使用友元函数重载运算符
⏹通常比用成员函数重载多一个参数
⏹但是有些运算符不能用友元函数重载
⏹=赋值运算符
⏹[]数组下标运算符
⏹()函数调用运算符
⏹new内存分配运算符
⏹Delete内存删除运算符
赋值运算符的重载
⏹对于类中含有指针数据成员的类,常常需要重载=号运算符
⏹只能利用成员函数重载,不能用友元重载
⏹重载的赋值运算符不能被继承
⏹不能将赋值运算符重载函数声明为虚函数
14、①基类与派生类的构造函数
基类的构造函数不被继承,需要在派生类中自行声明。
派生类的对象时,将自动执行基类与派生类的构造函数
基类的构造函数在派生类构造函数之前执行
传递参数
可以通过派生类构造函数显式调用基类的构造函数,从而为基类构造函数传递参数
②基类与派生类的析构函数
执行顺序
调用析构函数的过程与构造函数相反
首先执行派生类的析构函数,然后执行基类的析构函数
15、基类与派生类的名字冲突
同名覆盖原则与基类中有相同成员时:
若未强行指名,则通过派生类对象使用的是派生类中的同名成员。
如要通过派生类对象访问基类中被覆盖的同名成员,应使用基类名限定。
16、继承派生复制兼容问题
一个公有派生类的对象在使用上可以被当作基类的对象,反之则禁止。具体表现在:派生类的对象可以被赋值给基类对象。
派生类的对象可以初始化基类的引用。
指向基类的指针也可以指向派生类。
17、虚函数的作用
虚函数同派生类的结合可使C++支持运行时的多态性,实现了在基类定义派生类所拥有的通用接口,而在派生类定义具体的实现方法,即常说的“同一接口,多种方法”,它帮助程序员处理越来越复杂的程序。
虚函数与重载函数的关系
在一个派生类中重新定义基类的虚函数是函数重载的另一种形式,但它不同于一般的函数重载。
◆普通的函数重载时,其函数的参数或参数类型必须有所不同,函数的返回类型也可以不同。
◆当重载一个虚函数时,也就是说在派生类中重新定义虚函数时,要求函数名、返回类型、参数个数、参数的类型和顺序与基类中的虚函数原型完全相同。
◆如果仅仅返回类型不同,其余均相同,系统会给出错误信息;
◆若仅仅函数名相同,而参数的个数、类型或顺序不同,系统将它作为普通的函数重载,这时将丢失虚函数的特性。
纯虚函数
纯虚函数是一个在基类中说明的虚函数,它在该基类中没有定义,但要求在它的派生类中必须定义自己的版本,或重新说明为纯虚函数。
纯虚函数的定义形式如下:
virtual 函数类型函数名(参数表)=0;
如果一个类至少有一个纯虚函数,那么就称该类为抽象类。
抽象类只能作为其他类的基类来使用,不能建立抽象类对象,其纯虚函数的实现由派生类给出。
如果一个类至少有一个纯虚函数,那么就称该类为抽象类。
抽象类只能作为其他类的基类来使用,不能建立抽象类对象,其纯虚函数的实现由派生类给出。抽象类不能用作参数类型、函数返回值或显式转换的类型。可以定义抽象类的指针和引用,此指针可以指向它的派生类,进而实现多态性。
18、系统还预定义好了4个流类的对象,供用户需要时使用,它们是:
(1) cin: stream类的对象,用来处理标准输入,即键盘输入。
(2) cout:ostream类的对象,用来处理标准输出,即屏幕输出。
(3) cerr:ostream类的对象,用来处理标准出错信息,它提供不带缓冲区的输出。
(4) clog:ostream类的对象,用来处理标准出错信息,但它提供带缓冲区的输出。
具体流方面内容看ppt
19、异常处理
Try,throw,catch
Catch(…)可以捕获任何异常
20、名字空间(namespace)using namespace std;
访问名字空间的成员
例如:namespace NSA
{
Class Array
{….}
};
namespace NSB
{
Class Array1
{….}
};
①直接使用法
NSA::Array a; NSB::Array1 b;
②指定名字空间
using namespace NSA; Array a;
using namespace NSB; Array1 b;
③声明引用成员
using NSA::Array; Array a;
using NSB::Array; Array1 b;
④使用别名
namespace US=NSA;
namespace MS=NSA;
US::Array a;
MS::Array1 b;
21、static 作用
①第一条也是最重要的一条:隐藏。
当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。Static可以用作函数和变量的前缀,对于函数来讲,static的作用仅限于隐藏,而对于变量,其可以保持变量内容的持久。
一、局部静态变量
在C/C++中, 局部变量按照存储形式可分为三种auto, static, register
(
与auto类型(普通)局部变量相比, static局部变量有三点不同
1. 存储空间分配不同
auto类型分配在栈上, 属于动态存储类别, 占动态存储区空间, 函数调用结束后自动释放, 而static分配在静态存储区, 在程序整个运行期间都不释放. 两者之间的作用域相同, 但生存期不同.
2. static局部变量在所处模块在初次运行时进行初始化工作, 且只操作一次
3. 对于局部静态变量, 如果不赋初值, 编译期会自动赋初值0或空字符, 而auto类型的初值是不确定的. (对于C++中的class对象例外, class的对象实例如果不初始化, 则会自动调用默认构造函数, 不管是否是static类型)