C++考试重点总结文档格式.docx
- 文档编号:19712143
- 上传时间:2023-01-09
- 格式:DOCX
- 页数:11
- 大小:20.23KB
C++考试重点总结文档格式.docx
《C++考试重点总结文档格式.docx》由会员分享,可在线阅读,更多相关《C++考试重点总结文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
ofstreamfout("
student.dat"
ios:
:
binary);
//向文件中输入信息
for(inti=0;
i<
=20;
i++)
{cout<
输入编号:
cin>
>
numberi;
cout<
输入姓名:
namei;
cout<
输入成绩:
scorei;
stu[i].stu_set(numberi,namei,scorei);
fout.write((char*)&
stu[i],sizeof(stu[i])
fout.close();
ifstreamfin("
//显示文件内容到屏幕
for(i=0;
{fin.read((char*)&
stu[i],sizeof(stu[i]));
第"
学生:
stu[i];
fout.close();
return0;
2.实现一个栈类模版的定义。
cstdlib>
constintMaxStackSize=5;
//栈的大小,即栈中元素的最大个数
template<
classT>
classStack
{private:
Tstacklist[MaxStackSize];
//数组,用于存放栈的元素
inttop;
//栈顶位置(数组下标)
public:
Stack(void);
//构造函数,初始化栈
voidPush(constT&
item);
//将元素item压入栈
TPop(void);
//将栈顶元素弹出栈
voidClearStack(void);
//将栈清空
TPeek(void)const;
intStackEmpty(void)const;
intStackFull(void)const;
};
Stack<
T>
Stack(void):
top(-1){}
voidStack<
Push(constT&
item)//将元素item压入栈
{if(top==MaxStackSize-1)//如果栈满,程序终止
{std:
cerr<
"
Stackoverflow!
<
endl;
exit
(1);
top++;
//栈顶指针增1
stacklist[top]=item;
}
TStack<
Pop(void)//将栈顶元素弹出栈
{Ttemp;
if(top==-1)
Attempttopopanemptystack!
temp=stacklist[top];
//取出栈顶元素
top--;
//栈顶指针自减
returntemp;
Peek(void)const
{if(top==-1)
Attempttopeekatanemptystack!
exit
(1);
returnstacklist[top];
voidstu_set(intnumber1=0,char*name1="
floatscore1=0){}
intStack<
StackEmpty(void)const//测试栈是否空
{returntop==-1;
}//如果栈空则返回TRUE,否则返回FALSE
StackFull(void)const//测试是否栈满
{returntop==MaxStackSize-1;
}//如果栈满则返回TRUE,否则返回FALSE
ClearStack(void)//清空栈
{top=-1;
voidmain()
{inti;
charj;
float>
stack_float;
cout<
floatstackdemo"
endl;
for(i=0;
MaxStackSize;
stack_float.Push(i);
{cout<
stack_float.Peek()<
stack_int.Pop();
}}
3.通过使用普通函数重载函数模板max()来避免错误。
#include"
iostream"
cstring"
classTYPE>
TYPEmax(TYPEa,TYPEb)
{return(a>
b?
a:
b);
TYPEmax(TYPEa,TYPEb,TYPEc)
{TYPEt;
t=(a>
b)?
b;
return(t>
c)?
t:
c;
char*max(char*a,char*b)
{return(strcmp(a,b)>
0?
intmain()
{char*max1;
intx=10,y=20,max2;
doublea=10.3,b=21.7,c=14.5,max3;
max2=max(x,y);
max3=max(a,b,c);
max1=max("
XYZ"
"
ABC"
);
Themaximumof"
x
and"
y<
is:
max2<
a<
b<
c<
max3<
Themaximumof\"
XYZ\"
and\"
ABC\"
max1<
return0;
程序运行后输出结果表明错误得到了纠正:
Themaximumof10and20is:
20
Themaximumof10.3,21.7and14.5is:
21.7
XYZ
4.++与--运算符重载举例。
iostream>
Usingnamespacestd;
classtest//基类test的定义
{public:
//公有成员
test(int,int);
//构造函数
testoperator++();
//前置运算符
testoperator--();
testoperator++(int);
/后置运算符
testoperator--(int);
//后置运算符
private:
//私有成员
intt1,t2;
};
test:
test(inta,intb)
{t1=a;
t2=b;
testtest:
operator++()
―++test\n‖<
++t1;
++t2;
成员函数
友元函数
单目运算符
return*this;
operator++(int)
―test++\n‖<
inttmp1=t1;
inttmp2=t2;
t1++;
t2++;
returntest(tmp1,tmp2);
operator--()
―--test\n‖<
--t1;
--t2;
operator--(int)
―test--\n‖<
t1--;
t2--;
voidmain()//主函数
{testb(3,4);
//定义test类的对象b
++b;
//t1=4;
t2=5;
b++;
--b;
//t1=3;
t2=4;
b--;
5.使用自定义的复制构造函数。
cstring>
classmy_string{
char*s;
my_string(char*str);
//普通构造函数
my_string(constmy_string&
obj);
//自定义的复制构造函数
~my_string(){
if(s)delete[]s;
cout<
Freeings\n"
voidshow(){cout<
s<
\n"
}};
my_string:
my_string(char*str)//普通构造函数
{s=newchar[strlen(str)+1];
Allocatingroomfors\n"
strcpy(s,str);
obj)//自定义的复制构造函数
{s=newchar[strlen(obj.s)+1];
strcpy(s,obj.s);
Copyconstructorcalled.\n"
voiddisplay(my_stringob)
{ob.show();
{my_stringobj("
Hello!
display(obj);
obj.show();
该程序运行后的输出结果如下:
Allocatingroomfors
Copyconstructorcalled.
Freeings
6.类的基本编程:
已定义一个shape抽象类,在此基础上派生出矩形Rectangle和Circle类,二者都有GetPerim()函数计算对象的周长,并编写测试main函数。
classRectangle:
publicShape
{public:
Rectangle(floati,floatj):
L(i),W(j){}
~Rectangle(){}
floatGetPerim(){return2*(L+W);
private:
floatL,W;
classCircle:
Circle(floatr):
R(r){}
floatGetPerim(){return3.14*2*R;
}
floatR;
voidmain()
{Shape*sp;
sp=newCircle(10);
sp->
GetPerim()<
sp=newRectangle(6,4);
2.组合类:
如果一个类的成员是另一个类的对象,这样的成员称为该类的对象成员。
包含对象成员的类称为组合类。
构造函数:
主要用来在创建对象时初始化对象的,类的构造函数中对于对象成员的初始化,是用初始化表的方法实现的。
常成员函数:
使用关键字const说明的函数就是常成员函数,常成员函数是只读函数,它们不能修改对象的数据成员,或者说,常成员函数不能更新对象的状态。
常对象:
使用const关键字说明的成为常对象,常对象只能调用它的常成员函数,否则将会得到编译时错误信息。
而普通的对象既可以调用它的常成员函数,也可以调用普通成员函数。
3.面向对象:
面向对象程序设计方法有3个显著的特性:
封装性、继承性和多态性。
面向对象程序设计采用数据抽象技术,将具有相同特征的对象抽象成一个新的抽象数
据类型——类。
①对象:
对象是人们要研究的任何事物,其特性是:
1.每一个对象必须有一个名字以区别于其它对象;
2.用属性(或叫状态)来描述它的某些特征;
3.有一组操作,每一个操作决定对象的一种行为。
②类是对一组具有共同属性特征和行为特征的对象的抽象。
③方法对应于对象的行为(能力),即它是实现对象所具有的功能操作的代码段。
一个对象向另一个对象发出的请求称为消息,消息是要求某个对象执行其中某个功能操作的规格说明。
4.this指针是由C++编译器自动产生的一个隐含指针,编译器将该指针自动插入到类的所有成员函数的参数列表中,成员函数使用该指针来存取对象的数据成员。
静态成员函数可以在创建该类的任何对象之前处理静态数据成员,这是普通成员函数不能实现的。
一般来说,类的静态成员函数是用来访问静态数据成员的,当然也可以访问全局变量。
一个类的静态数据成员为该类所有对象共用,不管我们创建了这个类的多少对象,其静态数据成员在内存中只有一份拷贝。
引用:
引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。
引用的一个重要作用就是作为函数的参数。
友元类:
在C++程序中允许将一个类声明为另一个类的友元类。
5.栈与堆的区别栈是存放程序中的所有动态局部变量、函数参数、函数返回值等信息的一块内存区域。
栈的内存管理养个遵循后进先出的顺序。
在固定存储区域与堆栈之间的自由区域称为堆,从堆中获取内存比栈中获取内存要慢很多,但是堆的内存管理却比栈灵活很多。
只要堆中有空闲内存,任何时候你都可以从堆中获取内存,而且可以按任意顺序释放对象在堆中所占用的内存单元。
堆的内存是以动态分配方式管理的。
数据对象使用栈中内存比如使用堆中内存会使程序运行更快,但是有时使用堆中内存可以改善一种算法,使程序运行更快,使它的强壮性更好或者更灵活。
6三种继承方式:
a公有继承(public):
基类的public和protected成员的访问属性在派生类中保持不变,但基类的private成员不可访问。
b私有继承(private):
基类的所有公共成员都成为派生类的私有成员。
c保护继承(protected):
基类的public和protected成员都以protected身份出现在派生类中,但基类的private成员不可访问。
虚基类使用的原因与作用:
主要用来解决多继承时可能发生的对同一基类继承多次而产生的二义性问题.为最远的派生类提供唯一的基类成员,而不重复产生多次拷贝
赋值兼容依据:
派生类对象中有一个无名的基类对象。
规则:
在需要基类对象的任何地方都可以使用公有的派生类对象。
7.运算符重载:
C++语言提供的标准运算符可以重新在类中定义,使标准运算符作用于类的对象,从而使对象的计算操作表示得既自然又符合常规。
通过对运算符函数的重载实现的。
8.多态性:
当不同对象接受到相同的消息产生不同的动作,这种性质称为多态性。
允许用一个函数名的调用来执行不同的功能,即用同样的接口访问功能不同的函数,从而实现“一个接口,多种方法”。
实现多态的方式:
编译时多态性:
重载、覆盖和模板.运行时多态性:
虚函数.当用基类指针指向不同派生类对象时,系统会在程序运行中根据所指向对象的不同自行选择适当的函数,从而实现了运行时的多态性.
9.模板:
可以看做成对于某一类问题一种通用的解决方案,而实现的具体细节则需要根据实际问题对模板做出调整和优化。
①函数模板:
可以使用模板解决一些虽然函数定义不同但是完成的功能相同的函数。
②类模板:
类模板为具有一定类型的类,而这种类要根据类型来实例化,以完成特定的功能。
③模板函数:
函数模板的数据类型参数标识符实际上是一个类型形参,在使用函数模板时,要将这个形参实例化为确定的数据类型。
将类型形参实例化的参数称为模板实参,用模板实参实例化的函数称为模板函数④模板类:
模板类是类模板实例化后的一个产物。
10.类库:
类库是类的集合,并且给出了多个类之间的关系描述。
名字空间:
namespace为了解决名字冲突问题,使用名字空间来划分全局,它可以避免名字冲突。
具体的解决的办法就是将程序中相同的名字定义在一个不同名字的名字空间中。
STL:
①容器类:
用来保存其它对象②算法:
每个容器类中都定义了可以应用于该容器的一系列算法③迭代器:
迭代器是一种类似于指针的对象,在程序中我们可以使用迭代器来访问容器中的元素,就像我们使用指针来访问数组一样。
11.输入输出流机制的基本概念:
流表示了数据从源(产生者)到目的端(使用者)的传送过程,流负责在数据的产生者和数据的使用者之间建立联系,并管理数据的流动。
C++程序中数据的输入输出就是通过输入输出流来实现的。
streambuf:
为输入输出流部分进行通信提供统一的接口并隐藏底层实现
ios:
ios类提供了格式化输入输出、错误检测以及I/0流的状态信息。
getline():
需要输入含有空格的字符串时,可以使用流类的成员函数getline来实现。
12.对象的生命期:
产生:
throwclassName()时产生。
销毁:
该异常的最后一个catch子句退出时销毁
注意:
因为异常可能在catch子句中被重新抛出,所以在到达最后一个处理该异常的catch子句之前,异常对象是不能被销毁。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 考试 重点 总结