zoukankan      html  css  js  c++  java
  • 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、友元关系是不被继承的。

  • 相关阅读:
    Office 2003正版验证破解方法
    QQ邮箱 503 : HTTP Error 503 服务暂时不可用,请刷新重试
    再加几个MQL4 中的字符串处理函数
    C 处理可变参数函数 (二)
    Memcache 中实现消息队列
    提供MQL4 中比较实用的两个字符串处理函数
    在freebsd 上编译 pango with cairo
    C语言小技巧(1) 实现可变参数
    PHP 中的递归效率
    windows 下php 扩展 的好 资源
  • 原文地址:https://www.cnblogs.com/zxsnh/p/11586621.html
Copyright © 2011-2022 走看看