- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * * * * * * * * * * * 例 使用友元函数计算两点距离 #include iostream.h #include math.h class Point { private: // 私有数据成员 int x, y; public: // 外部接口 Point(int x=0, int y=0) : x(x), y(y) { } int getX() { return x; } int getY() { return y; } friend float dist(Point a, Point b); }; float dist( Point a, Point b) // 友元函数是一个一般函数 { double x = a.x - b.x; double y = a.y - b.y; return static_castfloat(sqrt(x*x + y*y)); } int main() { Point p1(1, 1), p2(4, 5); coutThe distance is: ; coutdist(p1, p2)endl; // 调用友元函数 return 0; } 友元的另一种类型是友元类,一个类可以声明另一个类为其友元类,这个友元类的所有成员函数都可以访问声明其为友元的类的所有成员(包括私有成员)。 由于访问权限控制符不影响友元声明,友元声明可放在类体中任何地方,建议把友元声明放在类体的开始位置。 例 3.5.2 友元类 友元类的使用举例 class A { private: int x; public: A(int xx=0) { x=xx; } }; class B { private: int x; A a; public: B(int xx=0) { x=xx; } void set(int xx) { a.x=xx; // 错误X } }; B的函数set()可以访问A的私有成员 friend class B class A // 定义类A { friend C; // 类C是类A的友元类 private: int a; int b; public: A(int x=0, int y=0) {a=x; b=y;} }; class C // 定义类C { public: void CMemberFun(A e) { e.b=20; }; }; 访问类A的私有成员 例 友元类的声明和使用。 说明: 友元提供了不同类或不同类的成员函数之间以及成员函数和一般函数之间的数据共享机制。 友元关系是单方向的,不具有交换性和传递性。 使用友元虽然简化了编程,但破坏了类的封装性,建议谨慎使用。 void main() { A a1; C c1; c1.CMemberFun(a1); // . . . . . . } const除了可用来修饰一般变量(const型变量),还可用来修饰对象(常对象)、数组、指针、成员变量(常数据成员)和成员函数(常成员函数)。 常对象:必须进行初始化,不能被更新。 const Time t(12, 23, 36); 常引用:被引用的对象不能被更新,作函数形参。 const Point p1=p0; 常数组:数组元素不能被更新。 int const array[100]; 常指针:指向常量的指针 const int *p1 = a; 3.6 常对象和常对象成员 何谓const型变量? 重点 3.6.1 常对象 常对象的概念:即对象的数据成员的值在对象的整个生存期内不能被改变。 常对象只能且必须利用构造函数进行初始化,以后不能再次赋值。 常对象的声明形式: const 类名 对象名(初始值列表) 例: 例如: class A { }; const A a(3, 4); A const a(3, 4); void main(void) { const Time t(12, 23, 36) ; // t是常对象,其属性值不能修改 t.setTime(12, 10, 00) ; // 语法错误X } class T
文档评论(0)