C++总结Word文件下载.docx
《C++总结Word文件下载.docx》由会员分享,可在线阅读,更多相关《C++总结Word文件下载.docx(23页珍藏版)》请在冰豆网上搜索。
15.
c++和c一样也使用终止符而不时分隔符,终止符是一个分号;
在C++中不能省略分号;
16.
函数头是函数调用的接口,int
main(void)在括号中使用关键字void明确地指出函数,函数不接受任何参数。
在C++(不是C)中,让括号空着与在括号中使用void等效(在C中,让括号空着意味着对是否接受参数保持沉默),有些函数使用下面的函数头,并省略返回语句;
voidmain()
17.
return0隐含的意思是,已经达到main()函数的尾部(不适用于其他函数)。
18.
在windows编程中,可以编写一个动态链接库(dll)模块,由于dll不是独立的模块,因此不需要main()。
还由用于专用环境的程序----如机器人中的控制器芯片—可能不需要main().但常规独立的程序都要main().
19.
源代码的文件扩展名取决于所用的C++系统,在其他系统中文件名可能为myfirst.c或myfirst.cxx.
20.
c++也能识别C的注释//和;
21.
使用cin和cout进行输入和输出的程序必须包含iostream文件(在有些系统中为iostream.h);
22.
头文件的命名约定:
头文件类型
约定
范例
说明
C++旧式风格
以.h结尾
Iostream.h
C++程序可以使用
C旧式风格
Math.h
C、C++程序可以使用
C++新式风格
没有扩展名
iostream
C++程序可以使用,使用namespacestd
转换后的C
加上前缀c,没有扩展名
cmath
C++程序可以使用,可不是C的特性!
23.
using
std这叫做using编译指令。
名称空间支持是c++中的一项新的特性,它是为了使多个厂商已有的代码组合起来的程序更加简单而设计的。
类、函数、和变量是C++编译器的标准组件。
他们现在都被放在名称空间std中。
仅当头文件没有扩展名h时,情况才是如此!
24.
usingnamespacestd;
这种加载是一种偷懒的做法,更好的方法是只使用需要的名称,这可以使用using声明来实现:
usingstd:
:
cout
usingstd:
cin用这样的代码来替换文件开始位置的代码:
std.
25.
cout<
<
”我在迅腾国际学习软件!
”;
上面是一条输出语句,双括号表示要打印的内容,就是说它将把信息以字符串的方式发送给cout;
该符号指出了信息流动的路径。
在这里cout是预定义对象,直到如何显示字符串,数字和单个字符等!
(对象是类的特定实例,而类定义了数据的存储方式和使用方式)
使用对象的好处:
不用了解对象的内部情况就可以使用它,只需要知道它的接口就可以了。
cout的对象属性包括一个插入符(<
),它可以将其右侧的信息插入到流中,在这里可以把cout看做是一个输出流,即从程序流出一系列的字符。
请看下面的例子:
”问世间情为何物?
该句就是将字符串“问世间情为何物”插入到输出流中。
因此与其说程序显示了一条信息,不如说他将一个字符串插入到输出流中.
26.
看上去就像按位左移操作符(<
),这是一个操作符重载的例子,通过重载同一个操作符将有不同的含义。
例如:
&
符号即表示地址操作符由表示按位AND操作符,而编译器可以根据上下文来确定其含义。
在C++中扩展了操作符的概念,允许为用户定义的类型(类)重新定义操作符的含义。
27.
C++中由两种换行符:
(1)
”string.\n”;
(2)
cout<
”string”<
endl;
绝对不可以把endl放在字符串中!
28.
C++源代码风格:
l
每行一条语句
每个函数都有一个开始括号可一个结束括号,这两个括号各占一行
函数中的语句都相对于括号缩进
与函数名称相关的括号周围没有空白
29.
空行将声明变量的语句和其他语句分开是C常用的做法,但在C++中不那么常见!
30.
要将信息存储在计算机中,必须指出信息的存储位置和所需的内存空间,在C++中就必须声明变量来完成这样的事情,所以在C++中使用变量前必须声明它。
有些语言像(BASIC)在使用新名称时创建新的变量,而不用显示的声明。
这看起来对用户比较友好,但一旦出现错误的拼写,就会很麻烦。
31.
通常情况下声明不一定是定义,定义就意味着它将导致编译器为变量分配内存空间,在比较复杂的情况下,还可能有引用声明,这些声明命令计算机使用在其他地方定义的变量。
程序中声明语句叫做定义声明语句,简称定义。
32.
在C和Pascal中所有的变量声明都位于函数或过程的开始位置,但c++没有这种限制,C++通常的做法是在首次使用前声明它。
这样在使用的时候就不必在程序中到处查找,但是这样也有缺点:
无法对函数那些变量一目了然。
对于声明变量,C++的做法是:
在首次使用变量前声明它。
33.
赋值语句是将值赋给存储单元。
C++和C有一项不同寻常的特性-------可以连续使用赋值操作符。
例如下面的例子:
Int
a:
intb;
intc:
c=b=a=100;
赋值过程从右向左进行!
34.
cout可以输出数字和字符串:
但这两者有天壤之别;
和C的输出不同,cout有着智能行为,这是因为C++面向对象的特性。
实际上,C++插入符(<
)将根据其后的数据类型相应的调整其行为!
cout可以识别数据类型,还可以扩展,也就是说可以重新定义<
操作符。
35.
cin
是输入函数。
cin>
>
fleas;
信息从cin流向fleas;
cin使用>
操作符从输入流中抽取字符,通常需要在操作符右边提供一个变量,来接受抽取的信息.cin和cout一样是智能对象。
36.
三种cout方式:
(1)cout<
”哈哈”<
”我在中心打代码”<
”你在干什么呢?
”;
(2)cout<
“哈哈”;
cout“我在中心打代码”;
(3)cout<
”我在中心打代码<
“你们在干什么呢》”;
之所以可以用上面的三种方式,是因为格式规则将标记间的换行和空格看做是相互交替的!
当代码太长的时候限制输出显示风格时可以采用第三种方法!
37.类的使用:
类是C++面向对象编程的核心概念之一。
类描述了一种类型的全部属性,对象是根据这些描述创建的实体。
Cout是ostream类的对象;
cinistream类的对象;
38.C++发送的信息的方式有两种:
一是使用类方法(本质上就是调用函数)二是重新定义操作符,cin和cout采用的就是这种方式。
39.函数的使用:
函数原型和定义是分开的:
原型只描述函数接口,也就是说它描述的是发送给函数的信息和返回的信息;
而定义包含了函数的代码。
库文件包含了函数的编译代码,而头文件则包含了原型,应在首次使用函数之前提供其原型,通常的做法是把原型放在main()函数的定义的前面
使用库函数:
有时候会出现-sqrt是一个没有定义的外部文件,很可能是编译器不能自动搜索数据库(编译器倾向于给函数名添加下划线前缀------提示他们对程序有最后的发言权)如果出现这样的错误,请查看编译器文档,看如何让编译器搜索正确的结果。
例如UNIX实现要求必须在命令行结尾使用—lm选项:
Ccsqrt.c–lm;
(2)函数变体:
与一些计算机语言不同,在C++中,函数调用必须包括括号,即使没有参数。
(3)在有些语言中,有返回值的函数被称为函数,没有返回值的函数被称为过程或子程序。
(4)每个函数定义都是独立的,所有函数的创建都是平等的!
(5)在同一个函数中,不能同时将cout用作对象名和变量名!
(6)不能将关键字作为变量名,也不能作为函数名。
40.函数可以返回一个值,但主函数有时候也返回一个值,那这个值是谁接受的呢?
答案:
可以将计算机操作系统(如UNIX或DOS)看做调用程序,因此main()的返回值并不是返回给程序的其他部分而是返回给操作系统
41.hex:
表示的是十六进制
dec:
表示的是十进制
oct:
表示的是八进制
42函数调用的一个简单的例子:
#include<
.
std;
voidwrite(char*s);
intmain()
{
charname[20];
”你叫什么名字?
cin>
name;
”你今年多大啦?
intage;
age;
”我叫”<
name<
”今年”<
age<
”岁了”<
write(“说说你的情况吧”);
}
voidwrite(char*s)
s;
43.面向对象编程的本质是设计并扩展自己的数据类型设计类型就是让数据和类型匹配
在创建自己的数据类型以前,必须了解并理解C++的内置的类型,因为这些类型是创建自己类型的基本组件。
内置的C++类型分两组:
基本类型和符合类型。
基本类型表示整数和浮点数,但C++直到没有那一种整型和浮点型能够满足所有的编程要求,因此它提供了多种变体。
44.简单变量:
为把信息存储在计算机中,必须记住三个属性:
信息将存储在哪里
要存储什么值
存储何种类型的信息
C++提倡使用有一些含义的变量名,下面是C++的命名规范:
在名称中只能使用字母字符、数字和下划线
名称的第一个字母不能是数字
区分大写字符和小写字符
不能将C++关键字用作名称
以两个下划线或下划线和大写字母打头的名称被保留给实现使用。
以一个下划线开头的名称留给实现使用,用作全局标识符
C++对于名称的长度没有限制,名称中的所有字符都有意义
倒数第二点:
想使用_time_stop或_Donut这样的名称不会导致编译器错误,而会导致行为的不确定性。
换句话说,不知道结果将是什么。
不出现错误的原因是因为,这样的名称不是非法的,但要留给实现使用。
全局名称指的是名称被声明的位置。
C++和C99标准是有区别的,后者只保证名称中的前63个字符有意义。
(在ANSIC中,前63个字符相同的名称被认为是相同的,即使第64个字符不同。
)
45.术语:
宽度用于描述存储整数时使用的内存量,使用的内存越多,则越宽。
C++的基本整型(按宽度递增的顺序分别是):
char、short、int、long其中每种类型都有符号版本和无符号版本,因此总共有八种类型可供选择。
short是shortint的简称;
long是longint的简称
字节的含义依赖于实现,因此在一个系统中,两字节的int可能是16位,而在另一个系统中可能是32位;
头文件climits(在老式的实现中为limits.h)中包含了关于整型限制的信息。
具体的说,它定义了表示各中限制的符号名称。
例如将INT_MAX定义为int的最大取值,将CHAR_BIT定义为字节的位数。
头文件climits是ANSIC头文件的C++版本,有些早期的C++平台中没有头文件。
C++循环和关系表达式
for循环的组成部分:
设置初始值(initialization)
执行测试,看看循环是否应当进行(test-expresstion)
执行循环操作
更新用于测试的值(将i+1后便结束了循环的第一个周期)(update-expresstion)
C++并没有规定text-expression_r的值限制为只能是真或假,可以使用任意表达式,C++将把结果强制转换成bool类型,值为0将被强制转换成bool的false,导致循环结束;
bool的true.
for循环看上去有些像函数调用,但两者的写法通常是有区别的:
C++常用的方式是,在for和括号之间加上一个空格,而函数则省略空格;
c++表达式是值或值与操作符的结合,每个c++表达式都有值。
操作符的优先级比表达式中使用的操作符高,因此代码使用括号来获得正确的运算顺序
老式C++实现可能要求使用ios:
boolalpha,而不是ios_base:
:
boolalpha来作为cout.setf()的参数,有些老式实现甚至无法识别这两种形式。
cout.setf(ios:
boolalpha)函数调用设置了一个标记,该标记命令cout显示true和false,而不是0和1
从表达式到语句的转化只是很小的一步,只要加一个分号就可以了例如下面:
Age=100是一个表达式,而Age=100;
就是语句,所有的表达式都可以成为语句,但不一定有编程意义。
例如a+10;
就是有效的语句编译器允许这样的语句出现,但它没有完成任何有用的工作,程序仅仅是计算和,而没有使用计算的结果,然后便进入下一条语句(智能编译器甚至可能跳过这条语句)。
对任何表达式加上分号都可以成为语句,但是这句话不能反过来说。
也就是说从语句中删除分号并不一定能将它转化成表达式,就我们目前所使用的语言而言,返回语句,声明语句和for语句都不满足“语句=表达式+分号“这种模式。
在for结构控制的3个表达式中可以使用这种方式for(inti=0;
i<
5;
i++)也就是说可以在for循环的初始化部分来声明变量,但这不是C++的特性,C也有这种设置。
这种设置在循环结束时,for循环控制部分生命的变量将过期。
通常定义一个const值来表示数组中元素个数是个好方法,请在声明数组和引用数组时使用const值
修改步长:
更新表达式可以是任何有效的表达式。
例如,如果要求每轮递增以i的平方加10,则可以使用表达式i=i*i+10.
递增和递减操作符都是小型的操作符,不过使用的使用要控制好,在同一条语句对同一个值递增和递减多次。
问题在于“用后修改“和”修改后使用“可能会变得模糊不清,也就是说下面的语句:
x=2*x++*(3-++x);
在不同的系统上将生成不同的结果。
对于这种语句,C++没有定义正确的正确的行为。
组合赋值操作符:
+=操作符将两个操作数相加,并将结果赋值给左边的操作符,这就意味着左边的操作符能够被赋值。
复合语句:
(语句块)
如果对循环体进行了缩进处理,但省略了花括号,编译器将忽略缩进,因此只有第一条语句位于循环中,该循环只执行第一条语句。
C++复习总结(涵盖所有C++基本考点)!
*********************************C++复习总结************************************
1.函数模板:
实际上是建立一个通用函数,其函数类型和参数类型不具体指定,用一个虚拟的类型来代表,这个通用函数就是函数模板。
#include
template
typename
T>
T
const&
max(T
a,T
b)
return
a>
b?
b;
int
main(){
ia=16,ib=12;
std:
"
a,b中的最大值为:
max(ia,ib)<
\n"
getchar();
}
2.只有类外定义的成员函数规模很小而调用频率较高时,才能将此成员函数指定为内置函数。
使用inline关键字。
举例:
inlinevoiddisplay();
3.类的数据成员是不能再声明类时初始化的。
4.构造函数:
是一种特殊的成员函数,与其他成员函数不同,不需要用户来调用它,而是在建立对象时自动执行。
\
构造函数的名字必须与类名同名,而不能由用户任意命名,以便编译系统能识别它并把它作为构造函数处理。
5.参数初始化表实现对数据成员的初始化,这种方法不在函数体内对数据成员初始化,而是在函数首部实现。
Box:
Box(inth,intw,intlen):
height(h),width(w),length(len){}
6.析构函数:
也是一个特殊的成员函数,它的作用于构造函数相反,它的名字是类名前面加一个“~”符号,
在C++中“~”是取反运算符,从这点也可以想到:
析构函数是与构造函数作用相反的函数。
析构函数的作用并不是删除对象,而是在撤销对象占用内存之前完成一些清理工作。
析构函数不能重载。
(肯定的,无参怎么重载)
7.this指针:
在每一个成员函数中都包括一个特殊的指针,这个指针的名字是固定的,称为this。
它是指向本类对象的指针,它的值是当前被调用的成员函数所在对象的起始地址。
8.对象的常引用:
把实参变量的地址传给形参,这样引用名也指向实参变量。
class
Time{
public:
Time(int,int,int);
hour;
minute;
sec;
};
Time:
Time(int
h,int
m,int
s){
hour=h;
minute=m;
sec=s;
void
fun(Time
t){
t.hour=18;
Time
t1(10,13,56);
fun(t1);
t1.hour<
0;
9.const的用法,概括来说就是被他修饰的对象,函数,变量或指针程序运行过程中不能别改变。
(自己总结的)
10.对象的复制:
用一个已有的对象快速的复制出多个完全相同的对象。
Box:
box2(box1);
11.静态数据成员:
以关键字static开头,如果想在同类的多个对象之间实现数据共享,也不要用全局对象,可以用静态的数据成员。
静态数据成员可以初始化,但只能在类体外进行初始化。
成员函数也可以定义为静态的,在类中声明函数的前面加static就成了静态
成员函数。
和静态数据成员一样,静态成员函数是类的一部分,而不是对象的一部分。
如果要在类外调用共用的静态成员函数,要用
类名和域运算符“:
:
”。
静态员函数的作用不是为了对象之间的沟通,而是为了能处理静态数据成员。
静态函数没有this指针。
既
然它没有指向某一对象,它就无法对一个对象中的非静态成员进默认访问(记在引用数据成员时不指定对象名)。
静态成员函数与非静态成员函数的根本区别是:
非静态成员函数有this指针,而静态成员函数没有this指针。
由此决定了静态成员函
数不能访问本类中的非静态成员。
静态成员函数可以直接引用本类中的静态数据成员,因为静态成员函数同样是属于本类的,可以直
接引用。
在C++中,静态成员函数主要用来访问静态数据成员,而不访问非静态成员。
12.友元:
在本类中用friend对该函数进行声明此函数就称为本类的友元函数。
一个类的有元函数可以访问这个类中的私有成员(破坏
了封装性,但是要考,还是要记住)。
Friend函数不仅可以是一般的函数(非成员函数),而且可以是另一类中的成员函数。
一个函数(包括普通函数和成员函数)可以被多个类声明为“朋友”,这样就可以应用多个类中的私有数据。
13.C++允许对类作“提前引用”的声明,即在正式声明一个类之前,先声明一个类名,表示此类将在稍后声明。
14.类模板:
模板是类的抽象,类是模板的实例。
template<
numtype>
Point{
private:
numtype
x,y;
Point(numtype
a,numtype
b){
x=a;
y=b;
addX(Point
q){
x+q.x;
addY(Point
y+q.y;