C++里面的面向对象 05.友元
来源:互联网 发布:mac itunes无铃声选项 编辑:程序博客网 时间:2024/05/16 02:06
类和类之间的关系
1.没关系
2.使用(use a,一个类的部分使用另一个类)。使用私有成员需要:友元类
3.组合关系(包含关系,has a关系)
4.继承关系(父子关系,从属关系,is a 关系)
友元类
友元函数是能够访问类中的私有成员的非成员函数。
友元函数从语法上看,它与普通函数一样,即在定义上和调用上与普通函数一样。
友元关系不具对称性。即 A 是 B 的友元,但 B 不一定是 A 的友元。
友元关系不具传递性。即 B 是 A 的友元,C 是 B 的友元,但是 C 不一定是 A 的友元。
作用及特点
友元提供了不同类的成员函数之间、类的成员函数与一般函数之间进行数据共享的机制。通过友元,一个不同函数或另一个类中的成员函数可以访问类中的私有成员和保护成员。
#include<iostream>#include<cmath>#define PI 3.14using namespace std;//先声明,方便后面定义友元类class Point;class MyCircle;class Point{ friend class MyCircle; //声明友元类,所有方法都可以调用点类里面的私有成员了public: Point() { x = 0; y = 0; } Point(double xx, double yy) { x = xx; y = yy; }; void Getxy(); //如果不是友元则只能通过这个访问私有变量 double getX0(){return x;} double getY0(){return y;} friend double Distance(Point &a, Point &b); //全局函数作为友元函数 //friend void MyCircle::showPoint(); 声明某函数的函数作为友元函数private: double x, y;};class MyCircle{public: MyCircle(double r) { m_r = r; MidP.x = 0; MidP.y = 0; }public: void showPoint(); void judge(Point &p); void setCir(double x, double y, double r); double getS() { m_s = PI*m_r*m_r; return m_s; } private: Point MidP; //圆心 double m_r; //圆半径 double m_s;};void Point::Getxy(){ cout << "(" << x << "," << y << ")" << endl;}void MyCircle::showPoint(){ cout << "(" << MidP.x << "," << MidP.y << ")" << endl;}void MyCircle::setCir(double x, double y, double r){ //这里面也是类的内部 MidP.x = x; MidP.y = y; m_r = r;}void MyCircle::judge(Point &p){ double s = (MidP.x-p.x)*(MidP.x-p.y) + (MidP.y-p.y)*(MidP.y-p.y) - m_r*m_r ; if (s > 0){cout << "out" << endl;} else{cout << "int" << endl;}}double Distance(Point &a, Point &b){ double dx = a.x - b.x; //直接访问了私有成员 double dy = a.y - b.y; return sqrt(dx*dx + dy*dy);}int main(void){ Point p1(3.0, 4.0), p2(6.0, 8.0); p1.Getxy(); p2.Getxy(); double d = Distance(p1, p2); cout << "Distance is" << d << endl; MyCircle c1(1); c1.setCir(0,0,1); c1.judge(p1); c1.showPoint(); return 0;}
0 0
- C++里面的面向对象 05.友元
- C++ 面向对象编程 友元函数的使用
- 友元与静态成员---面向对象的妥协
- 面向对象的 C
- <设计模式可复用面向对象软件的基础> [2.6]、享元模式(C#)
- C++面向对象编程 友元函数
- C语言的面向对象
- C的面向对象编程
- 【c#】 面向对象的编程
- C++:面向对象的基本特征
- 面向对象的C写法
- C++:面向对象的基本特征
- 面向对象的c语言
- 什么是面向对象?(javascript里面的面向对象是指的什么)
- 【C/C++】面向对象的基本概念
- 【面向对象】运算符重载、友元函数
- C++面向对象总结(二)--友元函数
- C++ Day04静态成员,友元,面向对象模型
- 报错原因:Auto property synthesis will not synthesize property 'title'; it will be implemented by its sup
- JAVA多线程的使用
- Linux下安装redis
- windows 远程登陆linux并显示图像界面
- Python工作日类库Busines Holiday介绍
- C++里面的面向对象 05.友元
- 英特尔Clear Containers与Docker,Kubernetes将会配合得更好
- TortoiseSVN 1.9.5安装 与 Eclipse 中安装SVN插件 图解详解
- [C++]多个文件中定义同一个namespace
- LeetCode刷题【Array】 Unique Paths II
- OVER(PARTITION BY)函数用法
- 剑指offer_21
- Set接口
- 2017最新java面试题