C++考试知识点复习全.docx

上传人:b****8 文档编号:13069814 上传时间:2023-06-10 格式:DOCX 页数:96 大小:5.54MB
下载 相关 举报
C++考试知识点复习全.docx_第1页
第1页 / 共96页
C++考试知识点复习全.docx_第2页
第2页 / 共96页
C++考试知识点复习全.docx_第3页
第3页 / 共96页
C++考试知识点复习全.docx_第4页
第4页 / 共96页
C++考试知识点复习全.docx_第5页
第5页 / 共96页
C++考试知识点复习全.docx_第6页
第6页 / 共96页
C++考试知识点复习全.docx_第7页
第7页 / 共96页
C++考试知识点复习全.docx_第8页
第8页 / 共96页
C++考试知识点复习全.docx_第9页
第9页 / 共96页
C++考试知识点复习全.docx_第10页
第10页 / 共96页
C++考试知识点复习全.docx_第11页
第11页 / 共96页
C++考试知识点复习全.docx_第12页
第12页 / 共96页
C++考试知识点复习全.docx_第13页
第13页 / 共96页
C++考试知识点复习全.docx_第14页
第14页 / 共96页
C++考试知识点复习全.docx_第15页
第15页 / 共96页
C++考试知识点复习全.docx_第16页
第16页 / 共96页
C++考试知识点复习全.docx_第17页
第17页 / 共96页
C++考试知识点复习全.docx_第18页
第18页 / 共96页
C++考试知识点复习全.docx_第19页
第19页 / 共96页
C++考试知识点复习全.docx_第20页
第20页 / 共96页
亲,该文档总共96页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

C++考试知识点复习全.docx

《C++考试知识点复习全.docx》由会员分享,可在线阅读,更多相关《C++考试知识点复习全.docx(96页珍藏版)》请在冰点文库上搜索。

C++考试知识点复习全.docx

C++考试知识点复习全

第一章

★内联函数:

程序调用这些成员函数时,并不是真正地执行函数调用过程(如保留返回地址等处理),而是把函数代码嵌入程序的调入点。

★C++要求对一般的内置函数要用关键字inline声明,但对类内定义的成员函数,可以省略inline。

★内联函数需要注意的是:

(1)在C++中,除具有循环语句、Switch语句的函数不能说明为内联函数外,其他函数都可以说明为内联函数。

(2)内联函数必须在程序中第一次调用此函数的语句出现之前被编译器看见。

(3)如果成员函数不在类体内定义,而在类外定义,系统并不把它默认为内联函数,调用这些成员函数的过程和调用一般函数的过程是相同的。

(4)使用小的内联函数在程序代码速度和大小可以取得折衷。

例:

classStudent

{public:

voiddisplay()//也可以写成inlinevoiddisplay()

{cout<<“num:

”<

cout<<“name:

”<

cout<<“sex:

”<

}

private:

intnum;

stringname;

charsex;

};

内联函数:

★引用:

(1)引用的作用是为变量其一个别名。

(2)在声明一个引用时,必须同时使之初始化,即声明它代表哪一个变量。

例1:

int&b=a1;

★使用引用注意事项:

(1)使用引用作为参数完成时,完成地址传递方式,即传送的是实参变量的地址,使实参变量与形参变量具有同一个地址。

(2)返回引用的函数:

为了将该函数用在赋值运算符的左边。

数据类型&函数名(参数列表)

例:

index(3)=16;

★输入与输出的操作:

Cout语句的一般格式为:

Cout<<表达式1<<表达式2<<……<<表达式n;

Cin语句的一般格式为:

Cin>>变量1>>变量2>>……>>变量n;

★注意:

(1)不能用一个插入运算符”<<”插入多个输出项

例1:

cout<

★一个cin语句可以分写成若干行。

例:

cin>>a>>b>>c>>d;

cin>>a

>>b

>>c

>>d;

输入变量值时可以用空格分隔,也可以用回车分隔。

★动态分配和撤销内存的运算

(1)分配内存:

new运算符

指针名=new结构名;

(2)删除内容:

delete运算符

delete指针名;

★编译指令功能主要有4中。

1、宏定义

※一般形式为:

#define标识符字符串;

#define宏名(参数表)字符串

例1:

#definePI3.14159

例2:

#defineS(a,b)a*b

※带参数的宏:

(1)编译程序中的实际参数代替宏中有关参数;

(2)当替换正文要书写多行,除最后一行之外,每行的行尾要加上一个反斜线。

#defineMAX(a,b)((a)>(b)>\

(a):

(b))

(3)宏定义的替换正文可以为空。

#defineREGISTER

REGISTERinti;

(4)与#define一起使用的还有#和##两个运算符。

例1:

#的引用是在宏扩展之后,将其右边的操作数变成一个串。

#definestring(a)#a

cout<

编译器将第二条语句处理为:

cout<<“programmingisfun”;

例2:

运算符##将其两边的操作粘连成一个表示符。

#defineconcate(a,b)a##b

intxy=10;

cout<

编译器将最后一条语句处理为:

cout<

2、文件包含

一般形式:

#include<文件名>

或#include“文件名”

例1:

#include<\user\prog.h>

注:

如果在C++程序中表示上述文件名,则必须使用双反斜杠。

例2:

charfname[]=“\\user\\prog.h”

3、条件编译

进行编译时对源程序中的内容只在条件满足的情况下才编译。

(1)#ifdef标识符

(2)#ifndef标识符

程序段1程序段1

#else#else

程序段2程序段2

#endif#endif

(3)#if表达式

程序段1

#else

程序段2

#endif

(4)、出错指令

#error出错信息

第二章类和对象

★一、类和对象

(1)类定义:

类代表了某一批对象的共性和特征。

(2)类和对象的关系:

类是对象的抽象,而对象是类的具体实例,或者说是类的具体表现形式。

(3)注意:

※类是抽象的,不占内存,而对象是具体的,占用存储空间。

※类是一种用户自己定义的数据类型。

※类由数据成员和函数成员构成--封装思想的实现(数据封装就是使用类将数据和操作这些数据的代码连接在一起。

在C++中,封装由struct、union和class等关键字提供)。

★对象的基本特性:

※对象之间可以相互赋值;

LocationLa,Lb;

La.init(5,6);

Lb=La;

※可使用对象数组;

LocationarrLoc[3];

※可使用指向对象的指针,使用取地址运算符将一个对象的地址置于该指针中;

LocationPa;

Location*Pb=&Pa;

※对象可以用做函数的参数,这是参数传递采用传值方式。

voiddisplay(Locationloc)

※一个对象可以用做另一个对象的成员

 

★说明类的方法:

(1)class类名{

private:

私有数据和函数

public:

公有数据和函数

protected:

保护数据和函数

};

★2、类声明有关事项:

※访问权限:

类的成员所具有的属性。

private只能被类中成员函数引用,类外不能调用。

public可以被本类中成员函数引用,也可以被类的作用域的其它函数引用。

protected不能被类外访问,但可以被派生类的成员函数访问。

※如果在类的定义中既不指定private,也不指定public,则系统就默认为私有的。

※类中说明的任何成员不能使用extern、auto和register

※不能在说明对象成员使用表达式进行初始化。

例:

classLocation

{private:

intX=25,Y;//错误的表达方式

};

★1、成员函数的性质

(1)它与一般的函数的区别只是:

它是属于一个类的成员,出现在类体中。

(2)在使用类函数时,要注意调用它的权限。

(3)一般的做法是将需要被外调用的成员函数指定为public,它们是类的对外接口。

2、在类外定义成员函数

(1)使用作用域运算符“:

(2)用作用域运算符来说明所声明的函数属于哪个类的。

(3)类函数必须先在类体中原型声明,然后在类外定义。

(4)对类体内定义的函数,默认为内联函数(函数代码嵌入程序的调入点)。

※类外定义成员函数

classStudent

{

public:

voiddisplay();

private:

intnum;

stringname;

charsex;

};

voidStudent:

:

display()

{cout<<“num:

”<

cout<<“name:

”<

}

Studentstud1,stud2;

★访问对象中的成员可以有3种方法:

(1)通过对象名和成员运算符访问对象中的成员;

访问对象的一般形式为:

对象名.成员名

例:

stud1.display();

(2)通过指向对象的指针访问对象的成员;

例:

classTime

{public:

inthour;

intminute;

};

Timet,*p;

p=&t;

cout<hour;

(3)通过对象的引用变量访问对象中的成员;

例:

classTime

{public:

inthour;

intminute;

};

Timet1;

Time&t2=t1;

cout<

★类不占用内存空间,每个对象占据内存空间,它们所保存的数据不同,但操作代码均是一样的。

为了节省内存,在建立对象时,只分配用于保存数据的内存,代码为每个对象共享。

类中定义的代码被放在计算机内存的一个公用区中供该类的所有对象共享。

#include

classArray_max

{public:

voidset_value();

voidmax_value();

voidshow_value();

private:

intarray[10];

intmax;

};

★成员函数的重载及其缺省参数

※重载函数:

函数的名字相同,但参数的类型确实却是不同的。

※函数也可以带有缺省参数。

voidvalueX(int);//带参数的重载函数

intvalueX();//带有缺省参数的重载函数

voidint(int=0,int=0);//带有缺省参数的函数

★this指针

1、用类去定义对象时,系统会为每一个对象分配存储空间。

2、一般情况下,不同对象的数据存储单元中存放数据值是不同的,而不同对象的函数代码是相同的,不论调用那一个对象的函数代码,其实调用的都是同样内容的代码。

#include

classTime

{public:

inthour;

intminute;

intsec;

voidset(){cin>>hour>>minute>>sec;}

};

voidmain()

{cout<

3、c++编译系统为每个对象所占用存储空间只是该对象的数据部分所占用的存储空间,而不包括函数代码所占用的存储空间。

第三章构造函数与析构函数

★构造函数

建立一个对象时,对象的状态(数据成员的取值)是不确定的。

为了是对象的状态确定,必须对其进行正确的初始化。

(1)构造函数是成员函数,它可自动被编译系统调用,进行对象的初始化;

(2)构造函数调用并不是由用户来完成的;

(3)构造函数的名字和类名同名,在定义构造函数时,不能指定返回类型,即使void类型也不可以;

(4)构造函数的声明形式:

类名(形参1,形参2,……形参n);//可以没有形参

(5)构造函数可以在类体内声明时定义,也可以在类体外定义。

在类体外定义形式:

类名:

:

类名(形参1,形参2,……形参n)

{x1=形参1;

x2=形参2;

……

}

或类名:

:

类名(形参1,形参2……形参n):

x1(形参1),x2(形参2),……,xn(形参n){}

★构造函数的作用及性质

✓C++提供构造函数来处理对象的初始化

✓构造函数是特殊函数,在建立对象时自动执行

✓构造函数的名字必须与类名相同

✓构造函数不具有任何类型,没有返回值。

★说明:

(1)构造函数不需用户调用,也不能被用户调用;

(2)如果用户未定义构造函数,则系统会自动提供一个默认的构造函数;系统提供的默认构造函数函数体是空的,也没有参数无参的构造函数属于默认构造函数

(3)一旦程序定义了自己的构造函数,系统就不再提供这个默认构造函数;

(4)尽管一个类中可以包含多个构造函数,但是对于每一个对象来说,建立对象时,只能执行其中一个构造函数,并非每个构造函数都被执行;

★默认构造函数

※用户自己没有定义构造函数时,由系统自动生成。

※该构造函数没有函数体,也没有参数,不执行初始化操作。

※一个类只能有一个默认的构造函数。

例:

Time:

:

Time(){}

※需注意:

一旦程序定义了自己的构造函数,系统就不再提供默认构造函数。

★注意:

※尽管类中可以包含多个构造函数,但对于每个对象来说,只执行其中一个构造函数。

※如果在建立时选用无参构造函数,应注意定义对象的语句:

Boxbox1;√

而不能写成:

Boxbox1();×

★构造函数的默认参数

※构造函数中的参数可以通过实参传递,也可以指定为某些默认值。

※就是用户不指定实参值,编译系统使用形参的默认值。

★说明:

v在声明构造函数时指定默认值,而不能只在定义构造函数时指定默认值。

v构造函数声明是,形参名可以省略。

v一个类中只能有一个默认构造函数

例:

Box();

Box(inth=10,intw=10,intl=10);

v一个类中定义了全部默认参数的构造函数后,就不能再重载构造函数。

★复制构造函数

v使用已有的对象来建立一个新对象。

v特点:

※该函数是一种构造函数。

※该函数只有一个参数,并且是对某个对象的引用。

※其定义格式:

类名:

:

复制构造函数名(类名&引用名)

类名:

:

复制构造函数名(const类名&引用名)

★说明:

(1)运算符new用于建立生存期可控的对象,new返回这个对象的指针;

(2)当使用new建立一个动态对象时,new首先分配足以保存Test类的一个对象所需要的内存,然后自动调用构造函数来初始化这块内存,在返回这个动态对象的地址。

★new运算符

✓new运算符动态分配内存

✓格式:

指针变量=newtype;

✓返回一个指向对象的指针的值,即所分配的内存空间的起始地址。

否则返回一个0指针。

✓例如:

Box*pt;

pt=newBox;//同时调用该类的构造函数

★delete运算符

v格式:

delete指针变量;

v在执行delete时,在释放内存空间之前,自动调用析构函数,完成善后清理工作。

★运算符new动态建立对象,delete撤销对象

★new和delete必须配对使用。

★运算符delete必须用于先前new分配的的有效指针

★new可以为数组分配内存,但当释放时,也可告诉delete数组有多少个元素。

★说明:

(1)应该在什么地方指定构造函数的默认参数?

应该在声明构造函数时指定默认值。

(2)如果构造函数的全部参数指定了默认值,则在定义对象时可以给一个或几个实参,也可以不给出实参。

(3)在一个类中定义了全部是默认参数的构造函数后,不能再定义重载构造函数。

例如:

在一个类中有以下构造函数的声明:

Box(int=10,int=10,int=10);//指定全部为默认构造函数

Box();//声明无参那的构造函数;是重载构造函数

Box(int,int);//声明有两个参数的构造函数,是重载

★复制初始化构造函数

(1)复制构造函数的形式:

X:

:

X(X&)

(2)说明:

※通常使用已有的对象来建立一个新对象;

※在使用该类的一个对象初始化该类的另一个对象时,调用这个函数;

例:

Testobj1(5,5.6);

Testobj2(obj2);

 

★析构函数

在对象消失时,使用析构函数释放由构造函数分配的内存。

1、定义:

(1)析构函数与类同名,为了与构造函数区分,在定义析构函数前加上“~”

(2)析构函数也不能指定返回类型,即使void返回类型也不行。

而且析构函数不能指定参数,但是可以显式地说明参数为void,即如X:

:

~X(void)Test:

:

~Test(){}

(3)一个类只能定义一个析构函数

(4)析构函数在对象的生存期结束时自动被调用

(5)如果在定义类时没有定义析构函数,编译系统要为这个类产生一个默认的析构函数

★析构函数和对象数组及运算符delete

※C++系统为对象数组的每个元素调用一次析构函数。

※当使用delete删除一个动态对象时,它首先为这个动态对象调用析构函数,然后释放这个动态对象占用的内存。

※每个对象都有一个析构函数,如果在定义一个类时没有定义一个析构函数,C++编译器要为这个类产生一个缺省的析构函数。

例如:

Test:

:

~Test()

{

}

★说明:

(1)析构函数的作用并不是删除对象,而是在撤销对象占用的内存之前完成一些清理工作。

(2)先构造的后析构,后构造的先析构。

它相当于一个栈,先进后出。

(3)static局部对象在函数调用结束时对象并不释放,因此也不调用析构函数。

(4)如果定义一个全局对象,则在程序的流程离开其作用域是(如main函数结束或调用exit函数)时,调用该全局对象的析构函数。

(5)如果用new运算符动态地建立一个对象,当用delete运算符释放该对象时,先调用该对象的析构函数。

★指向对象的指针:

对象空间的起始地址就是对象的指针。

★定义类对象的指针变量的一般形式:

v类名*对象指针名;

★指向对象成员的指针

v数据类型名*指针变量

例:

int*p;p=&t.hour;

★5、对象成员

※可以在一个类中说明具有类的类型的数据成员,这些成为对象成员。

※一般形式:

classX{

类名1成员名1

类名2成员名2

…….

类名n成员名n

};

※X类的构造函数要调用这些对象成员所在类的构造函数,X类的构造函数的定义形式:

X:

:

X(参数表0):

成员1(参数表1),成员2(参数表2),…,(参数表n)

{

//……

}

※对对象成员的构造函数的调用顺序取决于这些对象成员在类中的说明顺序,与它们在成员初始化列表中给出的顺序无关。

※在建立X类对象时,先调用对象成员的构造函数,初始化对象成员,然后才执行X类的构造函数,初始化X类的其他成员。

※析构函数的调用顺序与构造函数正好相反。

★对象的初始化:

※使用等号在说明语句进行初始化。

例如:

TestTry1=5;

TestTry2=Test(10);

※注意:

等号不是运算符,编译器对这种表示有特殊的解释→

TestTry1(5);

TestTry2(10);

★对象的赋值:

1、一个对象的值可以赋给另一个同类的对象。

2、对象之间赋值也是通过赋值运算符“=”进行的。

形如:

对象名1=对象名2;

3、对象的赋值只对其中的数据成员赋值,而不对成员函数赋值。

数据成员占存储空间,不同对象的成员函数占有不同的存储空间。

4、类的数据成员中不能包括动态分配的数据,否则在赋值式可能出现严重后果。

 

#include

classone

{public:

one(){cout<<1<

};

classtwo:

publicone

{intk;

public:

two():

k(0){cout<<2<

two(intn):

k(n){cout<<3<

};

voidmain()

{twob(4),c;}

★this指针

v每一个成员函数中都包含一个特殊的指针,这个指针的名字是固定的----this

vThis指针是隐式使用的,它是作为参数被传递给成员函数。

v例:

intBox:

:

volume()

{retuanheight*width*length;}

C++把它处理为:

intBox:

:

volume(Box*this)

{retuanthis->height*this->width*this->length;}

第四章继承与派生

★继承

※就是在一个已存在的类的基础上建立一个新的类。

※已存在的类成为基类或父类。

※新建立的类称为派生类或子类。

★派生类的特点

Ø继承了基类的所有数据成员和成员函数。

Ø增加了新的成员(数据成员或成员函数)。

Ø重新定义了已有的成员函数。

Ø改变基类成员的访问权限。

※用公有继承方式建立的派生类称为公有派生类,其基类称为公有基类。

公有基类

在公有派生类中的访问属性

私有成员

不可访问

公有成员

公有

保护成员

保护

※用私有继承方式建立的派生类称为私有派生类,其基类称为私有基类。

私有基类

在私有派生类中的访问属性

私有成员

不可访问

公有成员

私有

保护成员

私有

 

※受保护的成员不能被类外访问

※保护成员可以被派生类的成员函数引用

基类成员

在保护派生类中的访问属性

私有成员

不可访问

公有成员

保护

保护成员

保护

 

(1)派生类构造函数必须负责该派生类所有基类构造函数的调用;

(2)派生类构造函数的执行顺序是先执行基类的构造函数,再执行派生类本身构造函数。

(3)处于同一层次的各基类构造函数的执行顺序取决于定义派生类所指定的各基类顺序。

(4)与派生类构造函数中定义的成员初始化列表的各项顺序无关。

★派生类的构造函数和析构函数

1、构造函数

Ø构造函数不能够被继承

Ø派生类的构造函数必须通过调用基类的构造函数来初始化基类的子对象。

Ø在定义派生类构造函数时除了对自己的数据成员进行初始化外,还必须负责调用基类构造函数使基类的数据成员得以初始化。

★派生类构造函数的一般格式:

派生类构造函数名(参数列表):

基类构造函数(参数列表)

{

派生类中数据成员初始化;

};

★派生类构造函数的调用顺序如下

Ø基类的构造函数

Ø子对象的构造函数(如果有的话)

Ø派生类构造函数

★析构函数

Ø析构函数不能被继承。

Ø执行顺序为,先执行派生类的析构,在执行基类的析构函数。

★赋值兼容

✓派生的对象可以赋给基类对象;

deriverd;

baseb;

b=d;

✓派生类的对象可以初始化基类的引用;

deriverd;

base&br=d;

✓派生类的对象的地址可以赋给指向基类的指针。

derivedd;

base*pb=&d;

 

 

★虚基类

※如果在多条继承路径上有一个公共的基类,那么在这些路径中的某几条路径的汇总处,这个公共的基类就会产生多个实例。

※如果想使这个公共的基类只产生一个实例,则可以将这个基类说明为虚基类。

※这要求从base类派生新类时,使用关键字virtual将base类说明为虚基类。

 

第五章多态性和虚函数

★静态联编和动态联编

1、联编:

确定调用具体对象的过程称为关联。

一般地说,联编指把一个函数名和一个类对象捆绑起来,建立关联。

2、静态联编:

指在编译时进行的联编,称为静态联编。

Ø即在编译时就解决了程序中的操作调用与执行该操作代码之间的关系。

3、动态联编:

只有在程序执行时才能确定调用的函数,这种在程序运行时进行的联编,称为动态联编。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2