2. C++语言面向过程编程的特点

   日期:2024-12-27    作者:6r8oh 移动:http://ljhr2012.riyuangf.com/mobile/quote/57033.html

一、使用函数重载

函数重载产生多态性的例子

程序运行结果

35,39

C++允许为同一个函数定义几个版本,从而使一个函数名具有多种功能,这称为函数重载。只要分别为不同参数的max编制相应的函数体,就可以实现各自的功能。

 

二、新的基本数据类型及其注意事项

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

2、C++比C多了bool(布尔)型。bool只有一个字节,bool取值false和true,是0和1的区别。

3、C++只限定int和short至少要有16位,而long至少32位,short不得长于int,int不能长于long,VC++6.0规定int使用4字节,这与C使用2字节不同。

4、C++中的常量

 

 

 5、C++与C一样,也使用转义序列。如:'0'表示ASCII码值为零的空字符(NULL),'101'表示字符A。

 

 

三、动态分配内存

使用new和delete举例

说明:

(1)C++为结构动态分配内存一般格式为:

指针名=new 结构名 //分配

delete 指针名; //当不再使用这个空间时,必须使用delete 释放空间。

(2)C必须在可执行语句之前集中声明变量,而C++可以在使用对象时再声明或定义

 

四、引用

引用的例子

程序输出结果

x=56, &x =0012FF7C, a=56, &a=0012FF7C, r=56, &r=0012FF7C 
x=25, &x=0012FF7C, a=25,&a=0012FF7C,r = 25,&r = 0012FF7C

说明:

1)引用:简单的说就是为现有的对象起个别名,别名的地址与引用对象的地址是一样的。

引用的声明方式为: 数据类型 & 别名=对象名

注意:① 对象在引用前必须先初始化;

   ② 声明中符号"&"的位置无关紧要。

int& a=x; int & a=x; int &a=x; 等效。

2)所谓"引用",就是将一个新标识符和一块已经存在的存储区域相关联。因此,使用引用时没有分配新的存储区域,它本身不是新的数据类型。可以通过修改引用来修改原对象。

3)引用通常用于函数的参数表中,因为使用引用作为函数参数不产生临时对象,可提高程序执行效率和安全性。

4)引用也常用于作为函数的返回值,因为引用作为函数返回值可用于赋值运算符的左边。

5)引用实际上就是变量的别名,使用引用就如同直接使用变量一样,引用与变量名在使用的形式上完全一样,引用只是作为一种标识对象的手段。

但要注意

① 可以声明指向变量或引用的指针

如:int *p=&x; √

int &a=x; int * p=&a;√;

② 可以声明指针对指针的引用(为变量的指针起一个别名)

如:int * & p2=p1; √(式中p1、p2是指针, * 声明p2是指针,&声明p2是p1的引用);

③ 不能声明指针对变量的引用(不能为变量起一个指针作为它的别名)

如:int * &P=&x; × ;

④ 不能声明引用的引用

如:int & & r=x; ×;

⑤ 不能直接声明对数组的引用, 但可以通过typedef来间接的建立对数组的引用。

 

间接引用数组

程序输出:

12 34 100 78 90 98 76 85 64 43

 

五、对指针使用const限定符

1、变量的指针、指向变量的指针变量、指针变量指向的变量

如:int a;

int *p=&a;

*p=2;

P是变量a的指针,存放变量a所在的内存地址,则*p代表指针变量p指向的变量,也就是变量a,且下面等式成立:

p==&a *p==*&a==a &*p==&a (*p)++==a++

 

2、左值和右值

左值是指某个对象的表达式,必须是可变的。左值表达式在赋值语句中即可作为左操作数,也可作为右操作数,如:x=56;和y=x; ,而右值56就只能作为右操作数,不能作为左操作数。

 

3、指向常量的指针

const int *p

*p是常量,不能进行"*p="的操作,所以称为指向常量的指针

如:

const int y=58;

const int *p=&y; //p是指向常量y的指针,不能作为左值

int x=45;

const int *p=&x; //能通过左值x间接改变*p的值

 

4、常量指针

int x=5;

int * const p=&x;                      //P是常量指针,即是常量地址,必须初始化,此后p的值不能改变

*p=56                                         // p所指的变量x的值改变为56。

 

5、指向常量的常量指针

int x=2;

const int * const p=&x;

//*p和p都是常量,都不能作为左值,p必须初始化

 

六、泛型算法应用于普通数组

1、数组不能作为整体输出,C++引入STL库提供的泛型算法,大大简化数组操作。所谓泛型算法,就是提供的操作与元素的类型无关。

2、假设一维数组a和b的长度均为Len,数据类型为Type,则对数组内容的相关操作和语句如下:

(1)数组内容反转:

reverse(a,a+Len);      //数组元素反转排列

(2)复制数组内容:

copy(a,a+Len,b);     //将数组a的内容原样复制到数组b

reverse_copya,a+Len,b); //逆向复制数组a中内容到数组b

(3)数组升幂排序:

sort (a,a+Len);      //默认排序方式是升幂

(4)数组降幂排序:

sort (b,b+Len,greater<Type>()); //数组降幂排序

(5)检索查找数组内容:

find(a,a+Len,value); //查找数组a中是否存在值为value的元素

find函数返回的是位置指针,一般使用判别语句输出查找的内容,如:

Type *x=find(a,a+Len,value); //x是类型为type的指针

if(x==a+Len) cout<<"没有值为value的数组元素";

else cout<<"有值为value的数组元素";

(6)输出数组的内容

①将数组内容按正向送往屏幕:

copya,a+Len,ostream_iterator<Type>(cout,"字符串"));

输出方式是将每个元素与"字符串"的内容组合在一起连续输出。

如果使用空格" "或换行符" ",可以按格式输出。

copy(a,a+Len,ostream_iterator<Type>(cout," "));

   //每个输出元素后面输出一个空格

copy(a,a+Len,ostream_iterator<Type>(cout," "));

   //每个输出元素之后,换新行

②将数组内容按逆向方式送往屏幕:

reverse_copya,a+Len,ostream_iterator<Type>(cout,"字符串"));

总结

 

 

 

3、对数组内容进行升幂、输出、反转和复制等操作需要包含头文件<algorithm>;对数组内容进行降幂和检索等操作需要包含头文件<functional>。

 

演示数组升幂排序、复制、逆向和输出等操作

程序输出结果如下:

1.1  4.4  3.3  2.2 
2.2  3.3  4.4  1.1 
1.1  4.4  3.3  2.2 
1.1  2.2  3.3  4.4 
4.4  3.3  2.2  1.1

 

演示数组降幂,查找,输出等方式

输出结果为

1.1  2.2  3.3  4.4
4.4  3. 3  2.2  1.1 
有值为4. 4的数组元素 
没有值为8的数组元素

 

对一组数组进行局部操作

程序输出结果如下

3. 3  2. 2                               //只输出a [2]和a [3]
2.2  3. 3   4. 4                         //输出 a [3] ~a [1]
8  0  0  0  1.1  4.4  3.3  2. 2        //数组b的内容 
1. 1  3. 3  4.4  2. 2                    //只对中间2个排序
8  4.4  1. 1  0  0  0  3. 3  2.2       //只对前6个排序

 

演示对字符数组进行操作

程序输出结果如下:

! ereheraew 
! aeeeehrrw 
! ereheraew 
wrrheeeea! 
eeeehr 
wrrheeeea!
1 0

说明:字符串数组需要一个结束符,正向复制可以不需要复制结束符,但逆向复制时要注意, 不能将这个结束符逆向复制,否则字符串的第一位变成结束标志,使其成为空字符串。

 

七、数据的简单输入输出格式

1、C++提供了两种格式控制方式,一种是使用ios_base类提供的接口,另一种是使用一种称为操控符的特殊函数,操控符的特点是可直接包含在输入和输出表达式中,因此更为方便,不带形式参数的操控符定义在头文件< iostream> 中,带形式参数的操控符定义在头文件< iomanip> 中。

在使用操控符时,一是要正确包含它们,二是只有与符号"< <"或">>"连接时才起作用,三是无参数的操控符函数不能带有"()"号。

2、常用操控符及其作用

格式

含义

作用

dec

设置转换基数为十进制

输入/输出

oct

设置转换基数为八进制

输入/输出

hex

设置转换基数为十六进制

输入/输出

endl

输出一个换行符并刷新流

输出

Setprecision(int n)

设置浮点数输出精度n

输出

Setw(int n)

设置输出数据字段宽度

输出

Setfill(char  ch)

设置ch为填充字符

输出

Setiosflags(long flag)

设置flag指定的标志位

输出

resetiosflags(long flag)

清除flag指定的标志位

输出

上表中操控符使用时,后四个操控符必须包含头文件<iomanip>,其中后两个操控符的参数flag是引用C++的类ios_base里定义的枚举常量,要使用限定符"::",下面的表中是几个常用的ios_base定义的枚举常量,另外flag可由多个常量"或"起来使用,如:setiosflags(ios_base::showpoint | ios_base::fixed)。

 

参数flag常引用的枚举常量及其含义

常量名

含义

ios_base::left

输出数据按输出域左边对齐输出

ios_base::right

输出数据按输出域右边对齐输出

ios_base::showpos

在正数前添加一个“+”号

ios_base::showpoint

浮点输出时必须带有一个小数点

ios_base::scientific

使用科学计数法表示浮点数

ios_base::fixed

使用定点形式表示浮点数

 

使用setw设置输出宽度

程序输出结果:

29   1001 
  291001

 

setprecision功能演示

程序输出结果:

3.14159
3.14159 
3
3. 1 
3. 14 
3.141592


特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


举报收藏 0评论 0
0相关评论
相关最新动态
推荐最新动态
点击排行
{
网站首页  |  关于我们  |  联系方式  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号