当前位置:文档之家› 第1章C的初步知识

第1章C的初步知识

第1章C++的初步知识上学期是以C为蓝本来讲解,这学期需要增加一些C++的内容,这是进入C/C++程序设计II学习的前期准备。

从C到C++C语言是结构化和模块化的语言,它是面向过程的。

能处理小规模的程序。

但当规模较大时会显示出它的不足。

为了解决这个软件危机,提出了面向对象的程序设计(object oriented programming,OOP)思想。

C++保留了C语言原有的所有优点,增加了面向对象机制。

所以C++也称为“带类的C”。

C++对C的“增强”,表现在以下两个方面:1、在原来面向过程的机制基础上,对C语言的功能作了扩充。

(本章将介绍充分部分)2、增加了面向对象的机制。

在面向对象的程序设计中仍然要用到结构化程序设计的知识。

下面介绍C++对C的扩充,及与C的差别所在。

最简单的C++程序C++程序在结构上与C的差别如下:1、标准C++规定main函数声明为int型,即此主函数带回一个整型的函数值。

程序如果正常执行,则操作系统返回数值0,否则返回数值-1。

2、系统头文件不带后缀.h,如:#include<iostream>3、使用系统库时要使用命名空间std。

即使用using namespace std;,这句话的意思是使用命名空间std。

C++标准库中的类和函数是在命名空间std中声明的,因此程序中如果需要用到C++标准库,就需要用using namespace std;来声明,表示要用命名空间std中的内容。

例最简单的只有输出的程序#include<iostream>using namespace std;int main(){ cout<<"This is a C++ programm.\n";1.3 C1.3.1 C n";当程序需要执行键盘输入时,可以使用抽取操作符">>",从cin输人流中抽取字符。

例如:int a;cin>>a;。

不管把什么基本数据类型的名字或值传给流,它都能懂。

例如,下面的程序是输出字符串和整数:#include <iostream>using namespace std;int main(){ cout<<"This is a C++ program."<<endl;cout<<"This is "<<"a C++ program. "<<endl;cout<<"This is ";cout<<"a C++ program. ";cout<<endl;cout<<2;cout<<endl;return 0;}从上面的程序可以看出,输出的写法可以在同一行串连也可以分在几行。

cin可以和cout一样的方式调整行,它自动识别变量位置和类型。

例如:int a;float b;char c;,则cin>>a>>b>>c;,也可以写成:cin>>a;cin>>b;cin>>ccin能够知道抽取的变量的类型,它将对a,b,c分别给出一个整型、浮点型和字符型数。

二、输入流与输出流中使用控制符(第七章中详细介绍,这里了解就可以了)流的默认格式输出有时不能满足特殊要求,如:double average=;cout<<average<<endl;希望显示的是,即保留两位小数,可是却显示了,默认显示6位有效位。

用控制符(manipulators)可以对I/O流的格式进行控制。

控制符是在头文件中定义的对象。

可以直接将控制符插入流中。

常用控制符如下表所列。

表1 I/O流的常用控制符控制符描述DecHexOctsetfill(c)setprecision(n)setw(n)setiosflags(ios::fixed) setiosflags(ios::scientific) setiosflags(ios::left) setiosflags(ios::right) setiosflags(ios::skipws) setiosflags(ios::uppercase) setiosflags(ios::lowercase) 置基数为10置基数为16置基数为8设填充字符为c设显示小数精度为n位设域宽为n个字符固定的浮点显示指数表示左对齐右对齐忽略前导空白16进制数大写输出16进制数小写输出使用控制符时,要在程序的头上加头文件。

#include<iostream>#include<iomanip>using namespace std;int main(){ int i=100;cout<<i<<endl;cout<<hex<<i<<endl;double d=;cout<<d<<endl;cout<<setprecision(9)<<d<<endl;return 0;}1.3.2 用const定义常变量在C语言中常用#define命令来定义符号常量,实际上,只是进行字符置换,容易误解。

#include<iostream>using namespace std;#define R 2+3int main(){ cout<<R*R<<endl; 1.3.31.3.43.1415f.}void func(INTx){ 1.3.51.3.6.}void point(int a){return point(a,4);}void point(){return point(3,4);}可以用下面的默认参数的函数来替代:void point(int=3,int=4);当调用“point();”时,即调用“point(3,4);” 它是第3个声明的重载函数。

当调用“point(6);”时,即调用“point(6,4);”,它是第2个声明的重载函数。

当调用“point(7,8);”时,即调用第1个声明的重载函数如果一组重载函数(可能带有默认参数)都允许相同实参个数的调用,将会引起调用的二义性。

例如:void func(int); //重载函数之一void func(int,int=4); //重载函数之二,带有默认参数void func(int=3,int=4); //重载函数之三,带有默认参数func(7); //error: 到底调用3个重载函数中的哪个?func(20,30) //error:到底调用后面2个重载函数的哪个?学生练习:将P13例不用重载,改用带有默认参数的函数。

#include<iostream>using namespace std;int max(int a,int b,int c=0){return (a>b?a:b)>c?(a>b?a:b):c;}int main(){int a,b,c;cin>>a>>b>>c;cout<<max(a,b,c)<<" "<<max(a,b)<<endl;}1.3.7 变量的引用引用是C++引入的新语言特性,是C++常用的一个重要内容之一,正确、灵活地使用引用,可以使程序简洁、高效。

许多人使用它仅仅是想当然,在某些微妙的场合,很容易出错,究其原由,大多因为没有搞清本源。

一、引用的概念引用是个别名,就是某一个变量或对象(目标)的别名。

从那时起,引用作为目标的别名而使用。

对引用的改动实际就是对目标的改动,对引用的操作与对变量直接操作完全一样。

引用的声明方法:类型标识符&引用名=目标变量名;如:int a; int &ra=a; //定义引用ra,它是变量a的引用,即别名。

说明:(1)&在此不是求地址运算,而是起标识作用。

在看到&ra形式时,当&ra前有类型符时(如int &ra),它就是对引用的声明;如果前面没有类型符(如p=&ra),则&是取地址运算符。

(2)类型标识符是指目标变量的类型。

(3)声明引用时,必须同时对其进行初始化。

(4)引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,且不能再把该引用名作为其他变量名的别名。

ra=1; 等价于a=1;(5)声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。

故:对引用求地址,就是对目标变量求地址。

&ra与&a相等。

(6)不能对void进行引用。

(7)不能建立数组的引用。

因为数组是一个由若干个元素所组成的集合,所以无法建立一个数组的别名。

(8)由于指针也是变量,所以可以有指针变量的引用。

引用本身不是一种数据类型,所以没有引用的引用,也没有引用的指针。

二、引用的简单使用通过下面的例子来了解引用的简单使用。

//自编例,阅读程序#include <>void main(){ int intOne;int& rInt=intOne;intOne=5;cout <<"intOne:" <<intOne <<endl;cout <<"rInt:" <<rInt <<endl;rInt=7;cout <<"intOne:" <<intOne <<endl;cout <<"rInt:" <<rInt <<endl;cout <<"&intOne:" <<&intOne <<endl;cout <<"&rInt:" <<&rInt <<endl;}运行结果为:intOne:5rInt:5intOne:7rInt:7&intOne:0x0012FF7C&rInt:0x0012FF7C三、引用作为函数参数引用的一个重要作用就是作为函数的参数。

相关主题