• c++第三次作业:类的友元


    C++第三次作业:类的友元

    1、友元的关系提供了不同类或对象的成员函数之间、类的成员函数与一般函数之间进行数据共享的机制。通俗的说友元关系就是一个类主动声明其他函数是他的朋友,可以使其获得特殊访问权利。
    2、在友元函数中,是在类中用关键词friend修饰的非成员函数。虽然它不是本类的成员函数,但是在它的函数体可以通过对象名访问类的私有和保护成员。

    如下面一段代码求利润:

    #include"oo.h"
    using namespace std;
    class A {
    public:
    A(int x = 0, int y = 0) :price(x), cost(y) {};
    friend int profit(A& a);
    private:
    int price, cost;
    };
    int profit(A& a) {
    return (a.price-a.cost);
    }
    int main() {
    A pa(58, 32);
    cout << "Profit is:";
    cout << profit(pa) << endl;
    return 0;
    }

    在类A中声明了其友元函数,还是非成员函数,这样就可以访问类A中的私有成员:原价及成本,将其相减就可以得出利润。其运行结果如下:

    若不声明友元函数,则其非成员函数就不能访问类A的私有成员,也就是去了friend这个关键词,代码运行就会出错。

    3、同友元函数一样,一个类可以将另一个类声明为友元类。若A类为B类的友元类,则A类的所有成员函数都是B类的友元函数,都可以访问B类的私有成员和保护成员。
    如下代码:

    class A {
    public:
    A(int x = 0, int y = 0) :price(x), cost(y) {};
    int getp() { return price; }
    int getc() { return cost; }
    friend class B;
    private:
    int price, cost;
    };
    class B {
    public:
    void show();
    private:
    A a;
    };
    void B::show() {
    cout << "price is:" << a.getp()<< endl;
    cout << "cost is:" << a.getc() << endl;
    }
    int main() {
    B mb;
    mb.show();
    return 0;
    }

    友元需要注意的:

    1、友元的关系是不能传递的;
    2、友元关系是单向的;
    3、友元关系是不被继承的。

  • 相关阅读:
    【题解】Luogu1308 统计单词数
    【题解】Luogu1739 表达式括号匹配
    等待
    封城日记
    【题解】luoguP5717三角形分类
    【题解】LuoguP1059明明的随机数
    我是一个跳表
    【JVM故事】了解JVM的结构,好在面试时吹牛
    【JVM故事】一个Java字节码文件的诞生记
    Java多线程通关——基础知识挑战
  • 原文地址:https://www.cnblogs.com/zxsnh/p/11586621.html
Copyright © 2020-2023  润新知