在 C++ 中使用友元函数

2023-12-27

刚刚阅读了有关友元函数的内容,我正在尝试使用 B 类中的友元函数“Print”访问 A 类中的私有变量“number”。我正在使用 Visual Studio。我的代码的编译给了我很多不同的错误,例如:

C2011:'A':'class'类型重新定义
C2653: 'B' : 不是类或命名空间名称

请对我有耐心,并展示实现我的目标的正确方法。

这是我的文件 啊:

class A
{
public:
    A(int a);
    friend void B::Print(A &obj);
private:
    int number;
};

A.cpp:

#include "A.h"

A::A(int a)
{
    number=a;
}

B.h:

#include <iostream>
using namespace std;
#include "A.h"
class B
{
public:
    B(void);
    void Print(A &obj);
};

B.cpp:

#include "B.h"

B::B(void){}

void B::Print(A &obj)
{
    cout<<obj.number<<endl;
}

主要.cpp:

#include <iostream>
#include <conio.h>
#include "B.h"
#include "A.h"

void main()
{
    A a_object(10);
    B b_object;
    b_object.Print(A &obj);
    _getch();
}

...其次你可能需要一个类的前向声明B in the A.h引用的头文件B作为一个朋友:

#ifndef _A_H_
#define _A_H_
class B;

class A
{
     friend class B;
};
#endif

UPDATE
我目前不太确定是否可以将成员函数声明为友元,我会看看。

无法创建成员函数friend声明,您可以将全局函数或整个类声明为友元,另请参阅:C++ 参考,友谊和继承 http://www.cplusplus.com/doc/tutorial/inheritance/.

一般来说,这不是一个好的设计理念friend根本没有,因为它将课程紧密地结合在一起。更好的解决方案是耦合接口(无论如何都不需要公开可见)。
在极少数情况下,这可能是一个很好的设计决策,但这几乎总是适用于内部细节。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 C++ 中使用友元函数 的相关文章

  • 不同提供商的相同 EDMX 文件

    我正在开发一个项目 其中有一个本地数据库 SQL CE 在不存在与服务器的连接的情况下用作缓冲区 在服务器上我想使用相同的数据库布局 当然 我想使用服务器和客户端上可用的 Common dll 中的相同 EDMX 文件 在客户端中 我有一个
  • 显示 div 内的用户名列表

    我是 jQuery 新手 在我的项目中 我创建了一个类User其中代码如下所示 static ConcurrentDictionary
  • 在异步请求中使用超时回调

    我之前问过这个问题 但我将用提出的解决方案来完成这个问题 并提出另一个问题 我正在使用这个类来进行异步网络请求 http msdn microsoft com en us library system net webrequest aspx
  • ASMX Web 服务,测试表单仅在本地计算机上适用于一种 WebMethod

    我有一个正在测试的 ASMX WebService 并且在大多数方法上我都可以使用测试表单进行测试 然而 我确实有一种方法 测试表上写着 The test form is only available for requests from t
  • 尽管浮点数相同,但它们并不相等? [复制]

    这个问题在这里已经有答案了 下面的程序输出This No is not same 当两个数字相同时为什么会这样做 void main float f 2 7 if f 2 7 printf This No is same else prin
  • 为什么我在 WinForms 列表框中得到“System.Data.DataRowView”而不是实际值?

    每当我运行代码并尝试查看highscore我在列表框中得到的只是System Data DataRowView 谁能明白为什么吗 Code MySqlConnection myConn new MySqlConnection connStr
  • 从 Golang 调用 C 函数

    我想在 Golang 中编写控制器逻辑并处理 json 和数据库 同时在 C 中使用我的数学处理模型 在我看来 调用 C 函数的开销必须尽可能低 就像设置寄存器 rcx rdx rsi rdi 一样 执行一些操作fastcall 并获取 r
  • Web 文本编辑器中的 RTF 格式

    网络上是否有支持 RTF 格式文档输入的文本编辑器 我知道这对 webdev 来说有点奇怪 但我需要从数据库中读取 RTF 文档 并在基于 Web 的文本编辑器中对其进行编辑 然后将其存储回 RTF 中 在我在转换工具上投入太多资金之前 我
  • C# 反序列化过程中创建指向父对象的指针

    我有这样的课程 Serializable public class child public Parent parent Serializable public class Parent public List
  • 何时分离或加入 boost 线程?

    我有一个方法 大约每 30 秒触发一次 我需要在一个线程中包含它 我有一个可以从类外调用的方法 像 call Threaded Method 这样的东西会创建一个线程 该线程本身会调用最终的线程方法 这些是 MyClass 的方法 void
  • 确定相关词的编程方式?

    使用网络服务或软件库 我希望能够识别与词根相关的单词 例如 座位 和 安全带 共享词根 座位 但 西雅图 不会被视为匹配 简单的字符串比较对于这类事情似乎是不可行的 除了定义我自己的字典之外 是否有任何库或 Web 服务不仅可以返回单词定义
  • 如何解决文件被另一个进程使用的问题?

    我一直在 VS NET 2010 中调试 没有任何问题 但现在无法建造 我收到错误 Unable to copy file filename to bin Debug filename The process cannot access t
  • 禁用实体框架的默认值生成(Code First)

    我数据库中有一个列不能为空 我想将其设置为默认值在数据库中 问题是实体框架似乎自己创建了一个默认值 例如 int gt 0 并且完全忽略了数据库中的默认值约束 有没有办法禁用实体框架的默认值 我发现您可以使用以下属性来装饰您的字段 Data
  • 如果项目包含多个文件夹,如何使用 Add-Migration

    我想Add Migration使用我的 DbContext 但出现错误 The term add migration is not recognized as the name of a cmdlet function script fil
  • 如何阻止 Control-I 在 CoreWindow 范围内的 UWP 文本框中插入选项卡?

    当我在 UWP 应用程序中有一个 TextBox 时 对我来说 奇怪的行为 在 Windows 10 中创建通用的空白应用程序 UWP 应用程序 使用以下代码将文本框添加到默认网格
  • 按 Enter 继续

    这不起作用 string temp cout lt lt Press Enter to Continue cin gt gt temp cout lt lt Press Enter to Continue cin ignore 或更好 in
  • 在 C# 窗口应用程序中运行 C/C++ 控制台应用程序?

    现在 我想开发一个简单的应用程序 因此我决定最快的编码方式是 C NET 但现在 我很难实现我需要的功能之一 我想做的是在 C 应用程序的窗口内运行 C C 控制台应用程序 就像在虚幻前端中一样 添加一点通信方式 以便我可以为控制台应用程序
  • 使用方法的状态模式

    我正在尝试使用方法作为状态而不是类来基于状态模式的修改版本来实现一个简单的状态机 如下所示 private Action
  • 包含从代码隐藏 (ASP.NET C#) 到 ASPX 中的图像概述的图像列表 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 查找和替换正则表达式问题

    感谢这里对我其他问题的所有大力帮助 我开始掌握正则表达式 但我仍然对这个一无所知 我的代码是 StreamReader reader new StreamReader fDialog FileName ToString string con

随机推荐

  • EntityFramework t4 模板 - XML 文档

    我的 EDMX 文件存在以下问题 我在其中编写了一些属性和实体的文档 但 EF 5 的 t4 模板不会生成这些值 我想要的结果应该是 public class Person
  • Android 列表视图中的 Google 地图加载问题

    我试图在我的列表视图上显示地图视图 地图无法在列表视图中加载 如果我触摸地图视图 地图就会加载 如果我滚动列表视图 地图视图将进入卸载初始阶段 给出了我的列表视图适配器和屏幕截图 公共类 OfferListAdapter 扩展 BaseAd
  • 在 python 2.7 ctypes 中构建 UCS4 字符串缓冲区

    在尝试重新创建getenvironment C 函数 winapi c 直接链接 https github com python cpython blob 202fda55c2dffe27125703225e5af92254602dc6 M
  • StackTrace 构造函数和获取方法名称对性能的影响

    我的日志库中有这段代码 var stackTrace new StackTrace string operationName stackTrace GetFrame 1 GetMethod Name 根据我使用 PerfView 工具进行的
  • PHP 警告:113 字节的 POST 内容长度超出了未知中 -1988100096 字节的限制

    用户在我的网站上上传图像时遇到很多问题 他们最多可以上传 6 张图片 最初我必须将 php ini 中的值更改为 upload max filesize 2000M post max size 2000M max execution tim
  • 如何使用最小起订量来测试 MongoDB 服务层?

    我的应用程序和 mongo 数据库之间有一个服务层 我正在尝试使用最小起订量构建单元测试 我对最小起订量很陌生 所以我从我认为是一个微不足道的测试开始 要测试的代码 public List
  • Angular - 如何导入 googleapis 库?

    我正在尝试将 Google Drive API 合并到我的一个项目中 Node js快速入门指南 https developers google com drive api v3 quickstart nodejs要求我导入文件读取和 go
  • 是否存在无法避免 lambda 中的尾随返回类型语法的情况?

    关于之前的问题 是否可以通过 lambda 引用返回 T 类型的对象 而不使用尾随返回类型语法 q 40977730 我想知道是否还有其他重要的案例或例子尾随返回类型语法 当使用 lambda 时 可以not应避免 在 C 14 中 一个有
  • 在 MATLAB 中将 repmat 替换为 bsxfun

    在下面的函数中 我想进行一些更改以使其更快 它本身很快 但我必须在 for 循环中多次使用它 所以需要很长时间 我想如果我用 bsxfun 替换 repmat 会使其更快 但我不确定 我该如何进行这些替换 function out lagc
  • 当 onCreate 中完成 Activity 时,我的 Fragment 的 onCreateView 在 onCreate 之前如何被调用?

    这很奇怪 我有一个简单的应用程序 登录后会显示活动中的片段 该应用程序还有一个不活动的 超时 在此时间后它会完成活动并显示登录屏幕 如果应用程序在超时发生时处于后台 那么当下一次超时时onCreate or onStart事件发生在它完成的
  • 在哪里可以找到 FCM Firebase 注册 ID(在 PHP 中,对于 Ionic 框架)?

    我们已经使用 Ionic 框架构建了一个应用程序 我们是 Ionic 等的初学者 并将设备注册到我们的 Firebase 帐户 以便我们可以发送推送消息 我现在找到了一个通过 cURL 连接到 fcm 的 PHP 片段 我可以设置消息和标题
  • 实现阶乘函数时出现“所有控制路径递归”错误

    对于课堂 我有一个作业 编写一个 C 程序 输出您可以选择的不同方式的数量k一组中的对象n对象 两者n and k应为正整数 该数字由以下公式给出 C n k n k n k 您的程序应该使用两个返回值的函数 第一个应该叫factorial
  • 为什么来自类的java字节码出现新静态内部类的代码出现jvm指令ACONST_NULL

    我尝试新建一个内部静态类 但我发现字节码出现了jvm指令ACONST NULL bwteen NEW DUP and INVOKE SPECIAL 但我知道一门新课是 NEW DUP 调用 特殊 package com hoho api a
  • 自定义 Jackson 对象映射器

    我有一个用例 需要维护两组 JSON 输出 一组具有漂亮的 JSON 属性名称 另一组没有 因此 我决定自定义 ObjectMapper 以便它忽略字段上的 JsonProperty pretty name 注释并使用字段属性名称 在这种情
  • SQL内联if语句类型问题

    我想做一个 MS SQL 查询 返回如下内容 Col1 Col2 Col3 AAA 18 92 18 92 BBB 20 00 40 00 AAA 30 84 30 84 BBB 06 00 12 00 AAA 30 84 30 84 AA
  • 在服务器端java类中读取客户端时区

    我有一个客户端程序 它将时间发送到服务器端程序 我正在使用 Callendar 对象将时间值从客户端传递到服务器 我的客户端程序位于斯里兰卡 服务器位于英国 当我在客户端发送时间 例如 2011 11 21T12 43 41 352 05
  • 如何读取UTF-8的InputStream?

    欢迎大家 我正在开发一个 Java 应用程序 它从互联网调用 PHP 它给我一个 XML 响应 响应中包含这个词 Pr ximo 但是当我解析 XML 的节点并将响应获取到字符串变量中时 我收到这样的词 Pr ximo 我确信问题是我在 J
  • 如何绑定到“MvxLinearLayout”的“ItemClick”?

    我有一个ScrollView最初包裹着两个MvxListView控制 Having ListView控制在一个ScrollView不过 Android 不支持 这是有道理的 因为它们都尝试填充父高度并提供自己的滚动逻辑 我想要的是两个不可滚
  • 使用核心数据实现枚举的最佳方法

    将核心数据实体绑定到枚举值以便我能够为实体分配类型属性的最佳方法是什么 换句话说 我有一个名为Item与itemType我想要绑定到枚举的属性 最好的方法是什么 如果您想将值限制为枚举 则必须创建自定义访问器 因此 首先您需要声明一个枚举
  • 在 C++ 中使用友元函数

    刚刚阅读了有关友元函数的内容 我正在尝试使用 B 类中的友元函数 Print 访问 A 类中的私有变量 number 我正在使用 Visual Studio 我的代码的编译给了我很多不同的错误 例如 C2011 A class 类型重新定义