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

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

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

.

float dist(Point &p1,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(){ Point myp1(1,1),myp2(4,5); cout<<\距离是:\ cout<

若A类为B类的友元类,则A类的所有成员函数都是B类的友元函数,都可以访问B类的私有和保护成员。 class B { ... //B类的成员声明 friend class A;//声明A为B的友元类 ... }; 声明友元类,是建立类与类之间的联系,实现类之间数据共享的一种途径。 在UML中,两个类之间的友元关系是通过<>构造型依赖来表征。

图5-5 类A和类B友元关系的UML图

B <> A – x : int +display() : void +getx() : int -a +set(i : int) : void +display() : void #include using namespace std; class A{ public: .

.

void display(){ cout<

第三,友元关系是不被继承的。

5.5 共享数据的保护P163

5.5.1 常对象

声明格式: const 类型说明符 对象名; 或 .

.

类型说明符 const 对象名; 常对象必须进行初始化,且不能被更新。 语法如何保障常对象的值不被改变呢?

改变对象的数据成员值有两个途径:

一是在类外通过对象名访问其公有数据成员,这时语法会限制不能再赋值。

二是在类的成员函数中改变数据成员的值,规定不能通过常对象调用普通的成员函数。

5.5.2 用const修饰的类成员P164

1. 常成员函数

声明格式: 类型说明符 函数(参数表)const; 注意: ① const是函数类型的一个组成部分。

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

③ 常对象只能调用它的常成员函数。 ④ const可用于对重载函数的区分。

例如,

void print();

void print() const; 这是对print的有效重载。

在UML中,常成员函数前添加<>。 例5-7 常成员函数举例。

图5-6 包含常成员函数的R类的UML图

R – r1 : int – r2 : int +R(rr1 : int, rr2 : int) +print() : void <>+print() : void #include using namespace std; class R{ public: R(int rr1,int rr2):r1(rr1),r2(rr2){} .

.

void print(); void print() const;//常成员函数 private: int r1,r2; }; void R::print(){ cout<

类的成员数据也可以是常量。

使用const说明的数据成员为常数据成员。 任何函数中都不能对常数据成员赋值。

构造函数对常数据成员进行初始化,就只能通过初始化列表。 在UML中,常数据成员前添加const。 例5-8 常数据成员举例。

图5-7 包含常数据成员的A类的UML图

A – a : const int – b : const int=10 +A(i : int) +print() : void #include using namespace std; class A{ public: .

.

A(int i); void print(); private: const int a;//常数据成员 static const int b;//静态常数据成员 }; const int A::b=10;//静态常数据成员在类外说明和初始化 A::A(int i):a(i) { }//常数据成员只能通过初始化列表来获得初值 void A::print(){ cout<

常引用的说明形式: const 类型说明符 &引用名; 常引用所引用的对象不能被更新。 若用常引用做形参,便不会发生对实参意外的更改。

例5-9 常引用做形参

#include #include using namespace std; class Point{//Point类定义 public: Point(int xx=0,int yy=0):x(xx),y(yy){} int getX(){ return x; } .

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

.floatdist(Point&p1,Point&p2){//友元函数实现doublex=double(p1.x-p2.x);//通过对象访问私有数据成员doubley=double(p1.y-p2.y);returnstatic_cast(sqrt(x
推荐度:
点击下载文档文档为doc格式
2rdeg2ieb99lpyv23wwc1symv1jox50077u
领取福利

微信扫码领取福利

微信扫码分享