自考C++书中重点总结

更新时间:2024-01-07 11:07:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

1. C++程序以.cpp作为文件扩展名。必须有且只有一个名为main的主函数。Main不是C++的关键字。C++称为混合型语言。 例:1.1 p3

2. C++标准输入输出库的头文件是iostream。 3. cout<

endl可以插在流中间。例:cout<

5. 被const修饰的变量的值在程序中不能被改变。且声明时必须初始化。除非是用extern修饰的外部变量。例:const int i=8;const int d;//错误。extern const int d;//可以。 6. C++语言的标准模板库(Standard Templete Library,STL). 7. C++允许为同一个函数定义几个版本,从而使一个函数名具有多种功能,这称为:函数重载。例:int max(int,int); int max(int,int,int); 例1.2 p9

8. void是无类型标识符,只能声明函数的返回值类型,不能声明变量。

9. 地址运算符&用来取对象存储的首地址。

10. C++语言中的整数常量有4种类型。十进制常量,长整型常量(后缀L或l),八进制常量(前缀0),十六进制常量(前缀0x)。

可用后缀表示浮点常量。F(或f)表示是float类型。L(或l)表示它是long double类型。如果没有后缀,则是double类型。

11. 动态内存分配 new 类型名[size]。

使用 delete 指针名 释放存储空间。 例:p=new double [5]; delete p; 例 1.3 p 10

12. 引用 数据类型&别名=对象名;

13. 使用引用语句?int& a=x;?之前,对象x必须事先初始化。 Int& a=x;int & a=x;int &a=x都可以。例:int x=56;int&a=x;//声明a是x的引用。

int x=56;是声明和定义,为x分配内存并将56存入这个内存中。int& a=x;是声明不是定义,不需要为a分配内存。 引用实际上就是变量的别名。不能直接声明对数组的引用,也不能声明引用的引用。int& & r=x是对x引用的引用,是错误的。可以声明对指针的引用(如p2是指针,则int * &p1=p2),但不能声明指针对x的引用,即int * & p=&x,是错误的。可以声明指向引用的指针。例,a引用x,可以将指针p声明为 int * p=&a.。可以间接地建立对数组的引用,

使用typedef来实现。例:typedef int array[10];array a;aray & b=a;这样就定义了一个a数组的引用b. 例 1.5 p12

14. 可以使用const限定符强制改变访问权限。指向常量的指针是在非常量指针声明前面使用const,例如,const int *p;//*p 是常量,不能将*p作为左值进行操作。把const限定符放在*号的右边,使指针本身成为一个const指针。例:int x=5;int * const p=&x;指向常量的常量指针必须要初始化指针。例:int x=2;const int * const p=&x;//*p和p都是常量,都不能作为左值。

15. 泛型算法就是提供的操作与元素的类型无关。对数组进行排序分为升幂和降幂,默认为升幂排序。要输出数组的内容,对数组进行升幂排序,反转数组的内容,复制数组的内容等操作,需要包含头文件,要对数组进行降幂排序和检索,需要包含头文件。1.数组内容反转复everse(a,a+Len);2.

copy(a,a+Len,b);reverse_copy(a,a+Len,b);以逆向方式复制。3.数组升幂排序sort(a,a+Len);4.数组降幂排序sort(b,b+Len,greater());5.查找数组内容find(a,a+Len,value)//查找数组a内是否存在值为value的元素。6.输出数组的内容。copy(a,a+Len,ostream_iterator(cout,”字符串?));

copy(a,a+Len,ostream_iterator(cout,”?));//每个输出元素后增加一个空格。copy(a,a+Len,ostream_iterator(cout,”\\n?));//在输出每个元素之后,换新行。7.逆向输出。reverse_ copy(a,a+Len,ostream_iterator(cout,”字符串?)); 例;1.6,1.7,1.8,1.9 p14-17 16. 操作符控制数据的输入输出格式

dec:设置转换基数为十进制。oct:八进制。Hex:十六进制。endl:输出一个换行符并刷新流restiosflag(long flag)清除flag指定的标志位。setiosflag(long flag)设置flag指定的标志位。Setfill(char ch)设置ch为填充字符。Setprecision(int n)设置浮点数输出精度n.setw(int width)设置输出数据字段宽度width. 17. 枚举常量 限定符::

ios_base::left输出数据按输出域左边对齐输出。 ios_base::right左边对齐ios_base::showpoint 浮点输出时必须带小数点 ios_base::showpos在正数前添加一个+号 ios_base::scientific 使用科学计数法表示浮点数 ios_base::fixed使用定点形式表示浮点数。

18. setprecision(int n)是设定显示小数位数(小数点也占1位),1代表显示整数数字,2才显示小数点后面的一位数。 19. cout<

l;还将输出设置为在正的数字前面显示?+?号,这个设置保

使

cout<

第二章

1.在结构中可以定义函数,这些函数称为成员函数。Struct结构名{数据成员 成员函数};

2.如果在定义结构时,将数据成员使用private关键字定义,则产生封装性。私有的数据成员,必须通过共有的成员函数才能使用,这就称为数据的封装性。只有类使用关键字class定义,它默认的是private.

3.point();point(double,double);这是函数重载。因为这里的函数名与结构同名,所以称为构造函数。构造函数专门用于初始化对象。构造函数名 对象名(初始化参数);例Point b(18.5,10.6);使得b.x=18.5,b.y=10.6

4.从结构演变一个简单的类。其实,使用关键字class代替struct,就是一个标准的类。

5.string类,它的属性是一个字符串str,同名函数string是构造函数,用来初始化字符串。3个成员函数用来大堆属性str进行操作。成员函数find用来str字符串中检索所需要的子串;size成员函数计算并输出str存储的单词长度; substr成员函数用来返回str字符串中的子串。如果string的对象

str的内容为?ab?,则str[0]=’a’,str[1]=’b’. 对象名.成员函数 计算长度:str.size()

两个字符串连接:str1=str1+‘ ’+str1;

对象调用成员函数:对象名称.成员函数(参数(可供选择的消息内容))

String类提供的substr成员函数:例:string str1=”we are here! we are here!”;string newstr=str1.substr(3,3)这时newstr的内容是are.//第一个参数的要截取子串在字符串中的位置,第二个参数是截取的长度。

成员函数find用来在主串的位置 对象名称.find(要查找的字符串,开始查找的位置)例:int i=str1.find(“are”,0).表示从str字符串的位置0开始查找are出现的位置,结果为3. String类还提供一个辅助功能,以便使用getline从流cin中读出输入的一行给string类的对象。

String InputLine;getline(cin,InputlLine,’\\n’); Cout<<”your input:”<

如果输入?I am here!?则可得到结果:your input:I am here! 6.使用complex对象。复数(complex number)类需要两个初始值:实部和虚部。

Complex <数据类型> 对象名(实部值,虚部值) 例:complex numl(2,3);//复数2+3i

Complex num2(3.5,4.5);//复数3.5+4.5i; Complex的real和image成员函数用来输出对象的实部和虚部的值。Cout<

1.类对象一般都包括数据成员和成员函数。对象的值就是对象所有数据成员的值,约定参数传递中传递?对象值?是指对象的数据成员值,传递?对象地址值?是指对象的首地址。传对象不会改变原来对象数据成员值。 2.对象指针作为函数参数

将指向对象的指针作为函数参数,形参是对象指针(指针可以指向对象的地址),实参是的对象的地址值。传对象地址值要用到对象的指针,数组名就是数组的指针名。

3.函数原型参数的类型是指针,可以直接让它指向对象地址,即string *s1=&str1;使用&str1标识的是取对象str1的地址值,所以&str1直接作为参数即可。

4. 数组名就是数组的指针名,数组指针名指向数组首地址,所以相当于传地址值。

5.C++函数的返回值可以使除数组和函数以外的任何类型。 函数返回所指的对象必须继续存在,因此不能将函数内部的局部对象作为函数的返回值。

返回引用的函数:数据类型&函数名(参数列表)

1. 常对象的初始化:类名 const 对象名(参数表); //必须初始化。例:Base const a(25,68);

2. 一个const对象可以调用const函数,但不能调用非const成员函数。声明常成员函数的格式如下:类型标识符 函数名(参数列表)const;

3. 为了保证不仅声明const成员函数,而且确实也定义为const函数。定义格式如下: 类型标识符 类名::函数名(参数列表)const{//函数体}

4. const位于函数参数表之后,函数体之前。也可以再类中用内联函数定义const函数:类型标识符 函数名(参数列表)const{//函数} 在定义成员函数是,函数体之前加上const可以防止覆盖函数改变数据成员的值。

5. 在常成员函数里,不能更新对象的数据成员,也不能调用该类中没有用const修饰的成员函数。

6. 普通对象可使用全部成员函数,但常量对象只能使用常量成员函数。

7. 普通指针访问内存中给定类型的任何对象。指向类成员的指针则用来访问某个特定类的对象中给指定类型的任何成员。 8. pafn=A::fa; //指向类A的成员函数fa的指针pafn 9. A X;//类A 的对象x 10.

A * px=&x; //指向类A对象x的指针px

11. 12.

(x * pafn)(); //调用类A的对象x的成员函数fa (px-> * pafn)(); //调用类A的对象x的指针px指向

的成员函数fa。 第六章

1.类的继承是指派生类继承基类的数据成员和成员函数。继承常用来表示类属关系。当从现有类中派生出新类时,派生类可以有如下变化:1,增加新的成员(数据成员或成员函数)2,重新定义已有的成员函数。3,改变基类成员的访问权限。

2.C++中有两种继承:单一继承和多重继承。对于单一继承,派生类只能有一个基类。对于多重继承,派生类可以有多个基类。 3.定义派生类的构造函数的一般形式如下:

派生类::派生类名(参数表0):基类名(参数表){....//函数体}

4.构造函数(包括析构函数)是不能被继承的,所以一个派生类只能调用它的直接基类的构造函数。

5.使用公有方式产生的派生类的成员函数可直接访问基类中定义的或从另一个基类继承来的公有成员,但不能访问基类的私有成员。

6.复制兼容规则是指在公有派生情况下,一个派生类的对象可以作为基类的对象来使用的情况。

约定类derived是从类base公有派生而来的。1.派生的对象可以赋给基类的对象。例:derived d;base d;b=d;2.派生类的对

象可以初始化基类的引用。例:derived d;base &br=d;3.派生类的对象的地址赋给指向基类的指针。例:derived d;base *pb=&d;

7.只有派生类的指针才能调用派生类的成员函数。

基类用派生类的属性值代替自己原来的属性值。这就是公有派生的?isa?原则。

静态成员可以被继承,这时基类对象和派生类的对象共享该静态成员。

8.通过私有派生,基类的私有和不可访问成员在派生类中是不可访问的。而公有和保护成员这时就成了派生类的私有成员,派生类的对象不能访问继承的基类成员,必须定义公有的成员函数作为接口。 9.多重继承

一个类从多个基类派生的一般形式如下:class 类名1:访问控制 类名2,访问控制 类名3,。。。,访问控制 类名n{....//定义派生类自己的成员};

多重继承可以视为是单一继承的扩展。

10.对基类成员的访问必须是无二义性的,如果使用一个表达式的含义能解释为可以访问多个基类中的成员,则这种对基类成员的访问就是不确定的,称这种访问具有二义性。 11.作用域分辨操作的一般形式如下:类名::标识符

12.二义性检查是在访问权限检查之前进行的,因此,成员的访

问权限不能解决二义性问题。 13.典型问题分析

1.派生类没有使用基类的数据成员2.派生类支配基类的同名函数。对象一定先调用自己的同名成员函数,如果自己没有同名函数,则调用直接基类的同名函数。使用作用域分辨运算符可以指定要调用的函数3.二义性。可以使用作用域分辨运算符?::?和成员名限定解决二义性。4.友元和派生类。友元声明与访问控制无关。友元函数的声明可以置于任何部分。对友元函数声明的唯一限制是该函数必须出现在类声明内的某一部分。友元关系式无等级的。友元可以访问任何一个类成员函数可以访问的对象。友元关系不能继承。一个派生类的友元只能访问该派生类的直接基类的公有和保护成员,不能访问私有成员,当友元访问直接基类的静态保护成员时,只能使用对象名而不能使用成员名限定。 第七章

1.对类的描述 称之为类模板 2.类模板声明的一般方法是:

Template<类模板参数>class 类名{//类体};

3.类模板也称为参数化类。用类模板定义对象的一般格式如下: 类名<模板实例化参数类型>对象名(构造函数实参列表); 类名<模板实例化参数类型>对象名;//默认或者无参数构造函数 4.在类体外面定义成员函数时,必须用template重写类模板声明。一般格式如下:template<模板参数>

返回类型 类名<模板类型参数>::成员函数名(函数参数列表){//函数体}

5.模板实例化包括数据类型和值 6.

本文来源:https://www.bwwdw.com/article/ih6x.html

Top