OOP_由C到C++ (3)

C语言建议编程者为程序中的每一个函数建立原型,而Cpp要求为每一个函数建立原型,以说明函数的名称、参数类型与个数,以及函数返回值的类型。

其主要目的是让C++编译程序进行类型检查,即形参与实参的类型匹配检查,以及返回值是否与原型相符,以维护程序的正确性。

例如

int sum(int a,int b); //是函数sum的原型

函数原型语法的一般形式为:返回类型 函数名(参数表);

函数原型是一条语句,它必须以分号结束。

例1.6 函数原型的说明 #include<iostream.h> void write(char *s); void main() {write("Hello,world!");} void write(char *s) {cout<<s;}

在程序中,要求一个函数的原型出现在该函数的调用语句之前。

说明:

函数原型的参数表中可不包含参数的名字,而只包含它们的类型。例如: long Area(int ,int);

函数定义由函数首部和函数体构成。函数首部和函数原型基本一样,但函数首部中的参数必须给出名字而且不包含结尾的分号。

Cpp的参数说明必须放在函数说明后的括号内,不可将函数参数说明放在函数首部和函数体之间。这种方法只在C中成立。

主函数不必进行原型说明,因为它被看成自动说明原型的函数。

原型说明中没有指定返回类型的函数(包括主函数main),Cpp默认该函数的返回类型是int

如果一个函数没有返回值,则必须在函数原型中注明返回类型为void,主函数类似处理。

如果函数原型中未注明参数,Cpp假定该函数的参数表为空(void)。

6. const修饰符

在C中,习惯使用#define定义常量。

一般格式: #define 宏名 常数

#define PI 3.14 ………… s = 2 * PI * r; …………

C++利用const定义正规常数

一般格式: const 数据类型标识符 常数名=常量值;

采用这种方式定义的常量是类型化的,它有地址,可以用指针指向这个值,但不能修改它。

说明:

const必须放在被修饰类型符和类型名前面

数据类型是一个可选项,用来指定常数值的数据类型,如果省略了该数据类型,那么编译程序认为它是 int 类型。

如: const int a=10; 表示定义了一个初始值为10的整型常量,它在程序中不可改变,但可用于表达式的计算中。

例2.6 #define的不安全性 #include "iostream.h" main() { int a=1; #define T1 a+a #define T2 T1-T1 cout<<"T2 is "<<T2<<endl; return 0; }

但实际的输出是: T2 is 2

const作用与#define相似,但消除了#define的不安全性。

如果用const取代了两个#define,就不会引起这个错误。

#include<iostream.h> int main() { int a=1; const T1=a+a; const T2=T1-T1; cout <<"T2 is"<<T2<<endl; return 0; } const可以与指针一起使用

(1)指向常量的指针:一个指向常量的指针变量。

例如:

const char* pc=“abcd”; //声明指向常量的指针 pc[3]=‘x’; //错误 pc=“efgh”; //允许

(2)常指针:把指针本身,而不是它指向的对象声明为常量。

例如:

char* const pc=“abcd”; //常指针 pc[3]=‘x’; //合法 pc=“efgh”; //出错

创建一个常指针,就是创建一个不能移动的固定指针,但是它所指的数据可以改变。例如:

(3)指向常量的常指针:这个指针本身不能改变,它所指向的值也不能改变。

要声明一个指向常量的常指针,二者都要声明为const。

例如:

const char* const pc=“abcd”; //指向常量的常指针 pc[3]=‘x’; //出错 pc=“efgh”; //出错

这个语句的含义是:声明了一个名为pc的指针变量,它是一个指向字符型常量的常指针,用“abcd”的地址初始化该指针。

说明

(1). 如果用const定义的是一个整型常量,关键词int可以省略。所以下面的两语句是等价的

const int bufsize=200;

const bufsize=200;

(2). 常量一旦被建立,在程序的任何地方都不能再更改

(3). 与#define定义的常量有所不同,const定义的常量可以有自己的数据类型,这样C++的编译程序可以进行更加严格的类型检查,具有良好的编译时的检测性。

(4). 函数参数也可以用const说明,用于保证实参在该函数内部不被改动,大多数C++编译器能对具有const参数的函数进行更好的代码优化。

例如:通过函数i_Max求出整型数组a[200]中的最大值,函数原型应该是:int i_Max(const int* ptr);

这样做的目的是确保原数组的数据不被破坏,即在函数中对数组元素的操作只许读,而不许写。调用时的格式可以是:i_Max(a);

7. void型指针

void 通常表示无值,但将void作为指针的类型时,它却表示不确定的类型

这种void型指针是一种通用型指针,也就是说任何类型的指针值都可以赋给void类型的指针变量。

例如下面的程序段

void pa; //错误,不能声明void类型的指针变量 void* pc; //正确,可以声明void类型的指针 int i=456; char c=‘a’; pc=&i; pc=&c;

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpzsgy.html