好文档 - 专业文书写作范文服务资料分享网站

C++语言程序设计实验答案 - 数据的共享与保护 - 图文 

天下 分享 时间: 加入收藏 我要投稿 点赞

.

int getY(){ return y; } friend float dist(const Point &p1,const Point &p2);//友元函数声明 private: int x,y; }; float dist(const Point &p1, const Point &p2){//友元函数实现 double x=double(p1.x-p2.x);//通过对象访问私有数据成员 double y=double(p1.y-p2.y); return static_cast(sqrt(x*x+y*y)); } void main(){ const Point myp1(1,1),myp2(4,5); cout<<\距离是:\ cout<

5.6.1 C++程序的一般组织结构

通常一个项目至少划分为三个文件: 类声明文件(*.h文件) 类实现文件(*.cpp文件)

类的使用文件(*.cpp,主函数文件)

每个源程序文件称为一个编译单元。

C++语法要求一个类的声明必须出现在所有使用该类的编译单元中。

惯用的做法

将类的声明写在头文件中,使用该类的编译单元则包含这个头文件。

例5-10 具有静态数据、函数成员的Point类,多文件组织。

//文件1,类的声明,point.h #include using namespace std; .

.

class Point { public: Point(int xx=0,int yy=0){X=xx; Y=yy; countP++; }; Point(Point &p); ~Point(){countP--;} int GetX(){return X;} int GetY(){return Y;} static void GetC(){ cout<<\对象id=\//静态函数成员 private: int X,Y; static int countP;//静态数据成员声明 }; //文件2,类的实现,point.cpp #include “point.h” int Point::countP=0;//静态数据成员定义及初始化,使用类名限定 Point::Point(Point &p){ X=p.X; Y=p.Y; countP++; } //文件3,主函数,pmain.cpp #include “point.h” void main() { Point A(4,5); cout<<\ A.GetC();//输出对象号,对象名引用 Point B(A); cout<<\ Point::GetC();//输出对象号,类名引用 } .

.

图5-8 C++多文件组织结构图

#include指令的作用

将指定的源文件嵌入到当前源文件中#include指令所在位置,被嵌入的文件可以是.h文件,也可以是.cpp文件。

#include两上书写方式

#include<文件名>,按照标准方式搜索要嵌入的文件,该文件位于C++系统目录的include子目录下,一般包含系统提供的标准文件时采用这样的方式。

#include\文件名\,首先在当前目录下搜索要嵌入的文件,若没有,再按照标准方式搜索,对用户自己编写的文件一般采用这种方式。

在使用多文件结构时,注意联函数的特殊性

一个联函数,需要在每个调用它的编译单元中给出一个完全一致的实现。惯用的做法是将联函数的实现写在头文件中,由调用的编译单元包含这个头文件。

5.6.2 外部变量与外部函数P170

用extern声明外部变量。

外部变量是具有文件作用域的变量,定义在所有文件之外。

声明一个外部变量时,可以同时定义它,也可以只是引用一个在别处声明的外部变量。 //源文件1 int i=3 ;//定义变量i void next(void) ;//函数原型声明 void main() { i++; next() ; } void next(void) { i++ ; other() ; } //源文件2 .

.

extern int i ;//声明一个在其他文件中定义的外部变量i void other(void){ i++; } 外部变量是可以为多个源文件所共享的全局变量。 定义性声明 引用性声明

对外部变量的声明可以是定义性声明,即在声明的同时定义(分配存,初始化),也可以是引用性声明(引用在别处定义的变量)。

外部变量可用extern在多处声明,但对变量的定义和初始化是惟一的。 定义一个文件作用域的变量时,其默认状态可以为不同的编译单元所共享,只要在其他编译单元中冠以extern声明该变量即可,

若在文件作用域中定义变量时以static修饰,则该变量的作用围仅限于定义它的编译单元。

2. 外部函数

非成员函数具有文件作用域,可以在不同的编译单元被调用,只要在调用之前声明函数原型即可。

可以在声明函数原型或定义函数时用extern修饰,其效果与不加修饰的默认状态是一样的。

若在声明一个函数原型时或定义函数时冠以static修饰,就将函数的作用域限制在当前的编译单元。

5.6.3 标准C++库P172

标准C++类与组件在逻辑上分为6种类型: 输入/输出类

容器类与ADT(抽象数据类型) 存储管理类 算法 错误处理 运行环境支持

对库中预定义容的说明分别存在于不同的头文件中,要使用这些预定义的成分,就要将相应的头文件包含到源程序中。

标准C++库不再有“.h”扩展名,但仍保留18个带有“.h”扩展名的C头文件。 两种形式的头文件不能混用。

比如,

若已经包含头文件iostream,就不能再包含math.h,而要代之以新的头文件cmath。

使用标准C++库时,在紧接着所有的include指令之后,加入 using namespace std;

将指定命名空间中的名称引入到当前命名空间中。

否则,需要在使用std命名空间中的标识符时冠以命名空间名“::”。(第10

.

.

章)

5.6.4 编译预处理P173

编译器在对源程序进行编译之前,首先要由预处理程序对程序文本进行预处理。

预处理程序提供了一组编译预处理指令和预处理操作符。

所有的预处理指令在程序中都是以“#”来引导,每一条预处理指令单独占用—行,不要用分号结束。

预处理指令可以根据需要出现在程序中的任何位置。

1. #include指令(文件包含指令)

其作用是将另一个源文件嵌入到当前源文件中该点处。 ① include<文件名>

按标准方式搜索,文件位于C++系统目录的include子目录下。 ② include\文件名\

首先在当前目录中搜索,若没有,再按标准方式控索。

2. #define和#undef指令

#define用来定义符号常量,例如,#define PI 3.14。 #undef用来删除由#define定义的宏,使之不再起作用。

3. 条件编译指令

用来限定程序中的某些容要在满足一定条件的情况下才参与编译。 常用的条件编译语句有下列5种形式: ① 形式1 #if 常量表达式 程序段 //当“常量表达式”非0时编译本程序段 #endif ② 形式2 #if 常量表达式 程序段1 //当“常量表达式”非0时编译本程序段 #else 程序段2 //当“常量表达式”为0时编译本程序段 #endif ③ 形式3 #if 常量表达式1 程序段1 //当“常量表达式1”非0时编译本程序段 #elif常量表达式2 程序段2 //否则,当“常量表达式2”非0时编译本程序段 ... #elif常量表达式n .

C++语言程序设计实验答案 - 数据的共享与保护 - 图文 

.intgetY(){returny;}friendfloatdist(constPoint&p1,constPoint&p2);//友元函数声明private:intx,y;};floatdist(constPoint&p1,constPoi
推荐度:
点击下载文档文档为doc格式
2rdeg2ieb99lpyv23wwc1symv1jox50077u
领取福利

微信扫码领取福利

微信扫码分享