zoukankan      html  css  js  c++  java
  • c++-友元函数和友元类

    友元函数

    • 友元函数和友元类(破坏类的封装性)
    • 面向对象编程思想
    #define _CRT_SECURE_NO_WARNINGS
    #include <iostream>
    #include <cmath>
    
    
    using namespace std;
    
    class Point;
    
    class PointManager {
    public:
    	double PointDistance(Point &p1, Point &p2);
    };
    
    class Point
    {
    
    public:
    	//声明全局函数 PointDistance 是我类Point类的一个友元函数。
    	//friend double PointDistance(Point &p1, Point &p2);
    	friend double PointManager::PointDistance(Point &p1, Point &p2);
    
    	Point(int x, int y) {
    		this->x = x;
    		this->y = y;
    	}
    
    
    	int getX()
    	{
    		return this->x;
    	}
    
    	int getY()
    	{
    		return this->y;
    	}
    private:
    	int x;
    	int y;
    
    };
    
    double PointManager::PointDistance(Point &p1, Point &p2)
    {
    	double dis;
    	int dd_x = p1.x - p2.x;
    	int dd_y = p1.y - p2.y;
    
    	dis = sqrt(dd_x*dd_x + dd_y *dd_y);
    
    	return dis;
    }
    
    # if 0
    double PointDistance(Point &p1, Point &p2)
    {
    	double dis;
    	int dd_x = p1.x - p2.x;
    	int dd_y = p1.y - p2.y;
    
    	dis = sqrt(dd_x*dd_x + dd_y *dd_y);
    
    	return dis;
    }
    #endif
    
    
    
    int main(void)
    {
    	
    	Point p1(1, 2);
    	Point p2(2, 2);
    
    	//cout << PointDistance(p1, p2) << endl;
    
    	PointManager pm;
    	cout << pm.PointDistance(p1, p2) << endl;
    
    	return 0;
    }
    

    友元类

    #define _CRT_SECURE_NO_WARNINGS
    #include <iostream>
    
    using namespace std;
    
    class A 
    {
    public:
    
    	A(int a)
    	{
    		this->a = a;
    	}
    
    	void printA() {
    		cout << "a = " << this->a << endl;
    		// B objB(3000);
    		// cout << objB.b << endl;
    	}
    
    	//声明一个友元类B
    	friend class B;
    private:
    	int a;
    };
    
    
    class B
    {
    public:
    	B(int b)
    	{
    		this->b = b;
    	}
    	void printB() {
    		A objA(100);
    		cout << objA.a << endl;
    		cout << "b = " << this->b << endl;
    	}
    	friend class A;
    private:
    	int b;
    };
    
    int main(void)
    {
    	B bObj(200);
    
    	bObj.printB();
    	
    	return 0;
    }
    
  • 相关阅读:
    Kubernets 第一讲 初探
    docker 运行nginx并进入容器内部、端口映射
    Docker 国内镜像的配置及使用
    Centos7上安装docker
    富文本编辑器--FCKEditor 上传图片
    在centos7上安装elasticSearch
    Centos7上卸载openJdk安装,安装自己的JDK1.8
    fastdfs 上传图片 完整版
    nginx 启动报错 “/var/run/nginx/nginx.pid" failed” 解决方法
    nginx + fastdfs 的开机自启动
  • 原文地址:https://www.cnblogs.com/ygjzs/p/12076771.html
Copyright © 2011-2022 走看看