C++中一个类作为另一个类友元且产生了另一个类对象的使用方式

C++初阶——类和对象(六)初始化列表、static成员、友元、内部类 阅读详情

第一种:将ClassB::getNum()声明为ClassA的友元函数,

并在后续实现中产生ClassA的对象:


//ClassA.h

#ifndef H_ClassA
#define H_ClassA

#include <iostream>
using namespace std;
#include"ClassB.h"

class ClassA
{
public:
	ClassA():m_Num(3){ cout << "ClassA:构造函数"<<endl; }
	virtual ~ClassA(){ cout << "ClassA:析构函数"<<endl; }
	friend int ClassB::getNum();
	
private:
	int getNum(){ cout << "ClassA:" << m_Num<<endl; return m_Num; }
	int m_Num;

};

#endif


//ClassB.h

#ifndef H_ClassB
#define H_ClassB

#include<iostream>
using namespace std;

class ClassB
{
public:
	ClassB(){ cout << "ClassB:构造函数"<<endl; }
	virtual ~ClassB(){ cout << "ClassB:析构函数"<<endl; }
	int getNum();

};

#endif


//ClassB.cpp

#include"ClassB.h"
#include"ClassA.h"

int ClassB::getNum()
{
	{ ClassA a; return a.getNum(); }
}


//main.cpp

#include<iostream>
using namespace std;

#include "ClassA.h"
#include "ClassB.h"
int main(int argc, char* argv[])
{
	ClassB b;
	b.getNum();
	getchar();
	return 0;
}

第二种:将ClassB直接声明为ClassA的友元类,

然后直接在类定义中的getNum函数中产生了ClassA的对象:


//ClassA.h

#ifndef H_ClassA
#define H_ClassA

#include <iostream>
using namespace std;

class ClassA
{
public:
	ClassA():m_Num(3){ cout << "ClassA:构造函数"<<endl; }
	virtual ~ClassA(){ cout << "ClassA:析构函数"<<endl; }
	friend class ClassB;
	
private:
	int getNum(){ cout << "ClassA:" << m_Num<<endl; return m_Num; }
	int m_Num;

};

#endif


//ClassB.h

#ifndef H_ClassB
#define H_ClassB

#include<iostream>
using namespace std;
#include "ClassA.h"

class ClassB
{
public:
	ClassB(){ cout << "ClassB:构造函数"<<endl; }
	virtual ~ClassB(){ cout << "ClassB:析构函数"<<endl; }
	int getNum(){ ClassA a; return a.getNum(); };

};

#endif


//main.cpp

#include<iostream>
using namespace std;

#include "ClassA.h"
#include "ClassB.h"
int main(int argc, char* argv[])
{
	ClassB b;
	b.getNum();
	getchar();
	return 0;
}


两种情况的运行结果相同:




C++_类和对象_对象特性_友元_友元类_在一个类中声明另一类作为自己的友元类_可以访问自己类中的private变量---C++语言工作笔记053 然后我们再来一个去看看友元类,用类来做友元,上面我们说的是全局函数做友元. 首先我们先去写一个类叫GooGay好基友. 然后里面去定义一个成员变量,这个成员变量可以看到类型是 Building这个类,可以看到因为现在还没有这个Building这个类,就报错了,红色 这里我们可以先去 class Building去声明这个类,这样就说,告诉编译器,先别给我报错, 我后边再去写这个Building类. 然后我们再去看,可以看到这个GoodGay中的这个Building这个就不报错了.. 阅读详情

相关推荐

C++类做友元

类做友元 class Building; class goodGay { public: goodGay(); void visit(); private: Building *building; }; class Building { //告诉编译器 goodGay类是Building类的好朋友,可以访问到Building类中私有内容 friend class goodGay; public: Building(); public: string m_SittingRoom; /

希望我的博客,能帮上你解决学习中工作中所遇到的问题 514

C++类中的静态成员与静态函数

C++类中的静态成员有一个非常好的功能,那就是无论类定义了多少个对象,这些对象始终都共同使用这一个静态成员 例如:  class A{   static int num; A(){num++}     }  int A::num=0;   就会有如下效果:  A  a,b,c,d;     cout 可以看出,在每个对象中的num成员都只有一个副本。在内存中也是如此,初始化abcd时

u011101683的专栏 644

【博客汇总】UV打印机博客汇总

UV平板机博客汇总

Print World的专栏 1740

简单易懂的C++类的友元教程(friend)。全局函数做类友元,一个类做另一个类的友元,一个类中某个成员函数做友元。过程中顺序很重要哦。最后附有完整实现代码

我们直接让代码走起来,可以看到结果很明确。通过breather中的vist函数,可以直接访问building类的私有属性了。现在在breather类中,只有在vist函数体内才能访问building类的私有属性了。 最后附上完整代码......

qq_51004011的博客 2099

云计算系统等保测评对象和指标选取

参考GBT22239-2019《基本要求》附录D 云计算应用场景说明。简要理解下图,主要是云计算系统安全保护责任分担原则和云服务模式适用性原则,指导后续的测评对象和指标选取。

ryanzzzzz的博客 4679

Python+pytest+requests 自动化测试框架

环境准备 本次选用的是Python+Pytest+requests来搭建自动化框架,需要有 Python 环境(3.x 版本),安装pytest和requests,不会安装的自行去网上搜教程。 关于 Pytest 的基本使用,这里不作讲解,不清楚的可以看我之前的文章。 简单 Demo 我们先创建一个项目,取名api-test,然后在下面创建一个test_api.py的文件 # test_api.py import pytest import requests def test_01():

weixin_42686892的博客 1万+

C++11 让一个类的成员函数作为另一个类的友元函数

让一个类的成员函数作为另一个类的友元函数

人类工程师的博客 1480

国科GK7202V300芯片开发避坑指南:从uboot编译到SDK配置的12个实战问题解决

本文针对国科GK7202V300芯片开发过程中的常见难题,提供从uboot编译、SDK配置到系统部署的实战解决方案。详细解析了开发环境搭建、内核编译、驱动模块加载、根文件系统构建及烧写部署等12个关键环节的避坑指南,帮助开发者高效解决编译错误、配置冲突等典型问题,提升开发效率。

sunny的博客 234

C++中一个类中声明另一个类为友元函数

1、声明和定义 在使用友元函数之前需要先明白声明和定义的区别。 从编译原理上来说,声明是仅仅告诉编译器,有个某类型的变量会被使用,但是编译器并不会为它分配任何内存。而定义就是分配了内存。 2、 (1)classA.h //#include "classB.h" // 错误,不可包含classB.h头文件,只需作前置声明即可 class B; clas...

king_weng的博客 2760

PCL体素滤波器【2026最新版】

PCL实现的VoxelGrid类和ApproximateVoxelGrid体素滤波,详细记录。博客长期更新,本文最近一次更新时间为:2026年3月14日。

点云侠的博客 39万+

PCL K4PCS算法实现点云粗配准【2026最新版】

K4PCS算法实现点云粗配准。博客长期更新,本文最近一次更新时间为:2026年5月4日。

点云侠的博客 42万+

C++:友元(看这一篇就够了)

本文介绍了C++友元,包括为什么使用友元,怎样使用友元以及友元的三种实现

孙悟空 8万+

osgEarth 球上显示地形数据库

osgEarth 球上显示地形数据库 本文展示了一种由DSM和DEM得到Osgb工程,并在osgEarth球上显示的方法。其中DSM、DOM到Osgb工程的转换由VPB(VirtualPlanetBuilder)来实现,并采用Model图层将Osgb工程在球上显示。 本文主要解决一下问题: VPB编译 VPB生成地形 地形在球上显示 目录 1 前言 2 VPB编译与使用 3 地形在osgEarth球上显示 内容 1 前言 VirtualPlanetBuilder是一个开源代码工具,用于根据

CPWWHSU的博客 2436

C++实例:类的组合,即在一个类中包含另一个类的对象

#include <iostream> #include <cstring> #include <cstdlib> using namespace std; class data { private: int year; int month; int day; public: data(int yy,int mm,int dd) { year=yy; month=mm; day=dd; }

acktomas的博客 2万+

【零基础入门unity游戏开发——2D篇】SpriteEditor图片编辑器

【零基础入门unity游戏开发——2D篇】SpriteEditor图片编辑器

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2330

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

C++中什么是友元?友元的存在形式有?友元有何特点?

目录 一、友元函数 1.非成员函数 2.成员函数 3.友元函数的重载 二、友元类 三、友元与封装性 私有成员只能在类的成员函数内部访问,如果想在别处访问对象的私有成员,只能通过类提供的接口(成员函数)间接地进行。这固然能够带来数据隐藏的好处,利于将来程序的扩充,但也会增加程序书写的麻烦。C++是从结构化的C语言发展而来的,需要照顾结构化设计程序员的习惯,所以在对私有成员可访问范围的...

weixin_42672977的博客 7733

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

友元的创建和使用(普通函数做友元,成员函数做友元,类做友元)

友元的作用:允许让友元类(友元函数)访问自己的私有属性 友元的创建方式:在类的声明(函数的声明)前面加上友元关键字friend,放在允许被访问私有属性的类的里面(不受访问权限限制,随便放,只不过一般我们放在类的最上面)。 一、全局函数做类的友元函数 class Building { friend void visit1(Building building);//visit1函数在类里面被声明为友元类 friend void visit2(Building& building);//visit2函

yi_chengyu的博客 3718

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

C++类和对象篇——explicit,友元,匿名对象

c++类和对象

aaaaa_shen的博客 826

【C++类和数据抽象】友元

在 C++ 的面向对象编程中,封装是一个重要的特性,它通过访问控制符(如 private、protected 和 public)来限制对类成员的访问,从而保证数据的安全性和完整性。然而,在某些特定的场景下,我们可能需要打破这种封装,让某些外部的函数或类能够访问类的私有成员。这时,C++ 提供了友元(Friend)机制来实现这一需求。

byte轻骑兵的技术小窝 1万+

什么是友元?什么可以做友元?友元能干什么?(全局函数做友元,类做友元,成员函数做友元)c/c++

例如:你的生活中有一个特别好的朋友,你允许它进入你的房间(私有场所)也允许他进入客厅(相对公有场所),但是对于其他人你是不会允许他进入你的房间的,只允许他进入客厅。类对象也有这样类似的好朋友类,可以访问本类的私有成员,这个好朋友类就叫做这个类的友元,友元也可以是全局函数和别的类的成员函数,下面一一解答。

m0_57094953的博客 1620

32_一个类整体作为另一个类的友元

一个类的所有成员函数 访问 另一个类的私有数据 #include <iostream> using namespace std; class Room;//Room向前声明 class GoodGay { public: void visit1(Room &room);//此处的Room 被上方 class Room void visit2(Room &room); }; class Room { //将GoodGay作为Room的友元

每天积累一点点 682

cpp自学 day16(友元)

在程序里,有些私有属性 也想让类外特殊的一些函数或者类进行访问,就需要用到友元的技术友元的目的就是让一个函数或者类 访问另一个类中私有成员。

CWNU_Dragon的博客 1631

c++中类的友元

//友元 //当在类中确定这个变量为友元时就可以让它进行访问私有变量 //友元的目的就是让一个或者一个类访问另一个类中的私有成员 //友元的关键词为friend //友元的三种实现 //这里先来看第一种 全局函数做友元 #include<iostream> #include<string> using namespace std; class building { //goodgay是building的好朋友,可以进行访问私有成员 friend void goodgay(buil.

weixin_64067830的博客 5万+

【C++】类和对象(五)友元、内部类、匿名对象

前面我们说到类和对象是一个十分漫长的荆棘地,今天我们将走到终点,也就是说我们对于C++算是正式的入门了。

m0_64826370的博客 1219

C++中类的【友元】详解

在C++中,友元是一种特殊的关系,允许某个函数或类访问另一个类的私有成员和保护成员。友元打破了类的封装性,但也为实现一些复杂逻辑提供了便利。

专注于 Qt/C++ 应用开发和机器视觉领域的开源项目分享。期待与您共同进步! 2192

C++ 类的成员函数做友元产生的循环依赖问题

类的成员函数做友元时,极易产生循环依赖问题,导致程序无法编译通过。何谓循环依赖,简单举个例子,A类的定义需要完整的B类,B类的定义又需要完整的A类,两者相互依赖,都无法完成定义,这种现象便是循环依赖。

qq_56054422的博客 1984
上一篇: OGRE之第一个程序
下一篇: C++中new和delete在数组指针和指针数组中的调用
Beyond我爱杨
博客等级 码龄13年 36粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值