c++友元

作者: arkliu | 来源:发表于2022-11-15 07:39 被阅读0次

友元函数

#include <iostream>
#include <math.h>

using namespace std;

class Point{
    private:
        int m_x;
        int m_y;
    public:
        Point(int x, int y) {
            m_x = x;
            m_x = y;
        }
        int getX() {
            return m_x;
        }
        int getY() {
            return m_y;
        }
        // 声明getDistance2是类Point的友元函数,因此在getDistance2里可以直接通过对象访问其私有成员变量
        friend void getDistance2(Point& p1, Point& p2);
};

void getDistance(Point& p1, Point& p2) {
    double dis;
    int x_dis = p1.getX() - p2.getX();
    int y_dis = p2.getY() - p2.getY();
    dis = sqrt(x_dis * x_dis + y_dis * y_dis);
    cout<<"getDistance dis = "<<dis<<endl;
}

void getDistance2(Point& p1, Point& p2) {
    double dis;
    int x_dis = p1.m_x - p2.m_x;
    int y_dis = p2.m_y - p2.m_y;
    dis = sqrt(x_dis * x_dis + y_dis * y_dis);
    cout<<"getDistance2 dis = "<<dis<<endl;
}

int main() {
    Point p1(2,3);
    Point p2(3,4);
    getDistance(p1, p2);
    getDistance2(p1, p2);
    return 0;
}
#include <iostream>
#include <math.h>

using namespace std;

class Point;

class PointManager {
    public:
        void getDistance(Point& p1, Point& p2);
};

class Point{
    private:
        int m_x;
        int m_y;
    public:
        Point(int x, int y) {
            m_x = x;
            m_x = y;
        }
        int getX() {
            return m_x;
        }
        int getY() {
            return m_y;
        }
        friend void PointManager::getDistance(Point& p1, Point& p2);
};

void PointManager::getDistance(Point& p1, Point& p2) {
    double dis;
    int x_dis = p1.m_x - p2.m_x;
    int y_dis = p2.m_y - p2.m_y;
    dis = sqrt(x_dis * x_dis + y_dis * y_dis);
    cout<<"getDistance dis = "<<dis<<endl;
}

int main() {
    Point p1(2,3);
    Point p2(3,4);
    PointManager pm;
    pm.getDistance(p1, p2);
    return 0;
}

友元类

#include <iostream>

using namespace std;

class ClassA {
    private:
        int m_a;
    public:
        ClassA(int a) {
            m_a = a;
        }
        friend class ClassB; //声明ClassB为当前类的友元类后,在ClassB中就可以通过ClassA的对象,直接访问其私有成员
};

class ClassB {
    private:
        int m_b;
    public:
        ClassB(int b) {
            m_b = b;
        }
        void printB() {
            ClassA clazzA(22);
            cout << "m_b = " << m_b << "  clazzA.m_a = "<<clazzA.m_a<<endl;
        }
};

int main() {
    ClassB b(44);
    b.printB();
    return 0;
}

相关文章

  • c++ 友元

    在c++中,通过关键字friend声明为友元。友元可以范围与其有好友关系的类中私有成员。友元包括友元函数和友元类。...

  • C++语言基础(03)

    1.内存分配 C/C++ 内存分区: java 创建对象 2.常函数 3.友元函数和友元类 友元函数 友元类 4....

  • C++中的友元

    友元的介绍 什么是友元?友元是C++中的一种关系友元关系发生在函数与类之间或者类与类之间友元关系是单项的,不能传递...

  • C++友元

    friend类: 如果class A想让class B访问它的成员,只需要在class A中将class B声明称...

  • C++友元

    我承认你是我的朋友,你才是,当有一天,我觉得你有背叛我,除了你的名,你就再也不会进入我的内心。

  • C++ 友元

    ​ 采用类的机制后实现了数据的隐藏与封装,类的数据成员一般定义为私有成员,成员函数一 般定义为公有的,依此提供...

  • C++ 友元

    小项备注时间2020 年 3 月 28 日修改时间2020 年 3 月 28 日城市北京市房山区天气晴心情你猜 0...

  • C++ 友元

    友元 待续

  • 10-C++远征之模板篇-学习笔记

    C++远征之模板篇 将会学到的内容: 模板函数 & 模板类 -> 标准模板类 友元函数 & 友元类 静态数据成员 ...

  • 慕课网-C++远征之模板篇(上)-学习笔记

    C++远征之模板篇 将会学到的内容: 模板函数 & 模板类 -> 标准模板类 友元函数 & 友元类 静态数据成员 ...

网友评论

      本文标题:c++友元

      本文链接:https://www.haomeiwen.com/subject/ammrtdtx.html