zoukankan      html  css  js  c++  java
  • c++语言 友元类和友元方法 将普通函数声明为友元函数

    //c++语言 友元类和友元方法
    //友元函数:如果在一个类的外面定义了一个函数(该函数不属于这个类),当类中用friend对该函数进行声明后, 该函数就可以访问类中的所有成员.
    //友元函数分为:将普通函数声明为友元函数,将其他类中的成员函数声明为友元函数.
    //***将普通函数声明为友元函数
    #include "stdafx.h"
    #include <iostream>
    using namespace std;
    class CShop //声明一个CShop类
    {
    public:
        CShop(int size, int price);
        void ShowSize();
        void ShowPrice();
        friend int ChangePrice(CShop &shop, int price);
    private:
        int m_size;
        int m_price;
    
    };
    CShop::CShop(int size, int price)
    {
        m_size = size;
        m_price = price;
    }
    void CShop::ShowSize()
    {
        cout << "商品的数量:" << m_size << endl;
    }
    void CShop::ShowPrice()
    {
        cout << "商品的价格:" << m_price << endl;
    }
    int ChangePrice(CShop &shop, int price) //友元函数的定义
    {
        shop.m_price = price; //在友元函数中访问私有成员变量
        return shop.m_price;
    }
    
    int main(int argc, char * argv[])
    {
        CShop shop(50, 100); //定义一个CShop类的对象, 并进行初始化
        cout << "旧的价格:" << endl;
        shop.ShowPrice();
        shop.ShowSize();
        ChangePrice(shop, 200); //调用友元函数
        cout << "新的价格" << endl;
        shop.ShowPrice();
        shop.ShowSize();
        return 0;
    }
    //在代码中可以看到,在类中声明外界的普通函数为友元函数如下:friend int ChangePrice(CShop &shop, int price); 这样, 在该函数的定义中就可以访问类对象中的私有成员.
    //关于友元,以下几点需要注意:
    //一.友元关系是单向的,而不是双向的.如果声明B类是A类的友元类,不等于A类是B类的友元类,A类中的成员函数不能访问B类中的私有成员
    //二.友元关系不能传递.如果A是B的友元,B是C的友元,并不意味着A是C的友元.
    //三.友元关系也不能继承.如果A是B的友元,C派生于A,并不意味着C是B的友元.
    //在实际的工作中,如果没有必要的话,一般并不将整个类都声明为友元,只是将特定的成员函数声明为友元函数,这样更安全一些.
  • 相关阅读:
    cxgrid动态创建列
    cxgrid显示海量数据
    Delphi 两个应用程序(进程)之间的通信
    Delphi实现窗体内嵌其他应用程序窗体
    Change tab position of PageControl to bottom
    how can I make the login form transparent?
    UniDBGrid增加显示记录数的label及隐藏refresh按钮
    java工厂模式实例化class
    Java 语言细节
    applet示例 WelcomeApplet.java <Core Java>
  • 原文地址:https://www.cnblogs.com/pythonschool/p/2759180.html
Copyright © 2011-2022 走看看