首页 > 其他分享 >友元的使用(改进)

友元的使用(改进)

时间:2022-09-27 15:44:07浏览次数:69  
标签:友元 const height SemiGlobalMatching width 改进 sgm 使用 Grad

之前写了一篇关于友元使用的博客(友元的使用 - 小凉拖 - 博客园 (cnblogs.com))但是发现并不好用,原因是:
当我吧Grad类作为SemiGlobalMatching的友元时,Grad类中并不能使用SemiGlobalMatching赋值好了的成员属性(比如说height_这个属性),也就是我在主函数中定义了一个实例化了一个SemiGlobalMatching类的对象(姑且认为它是名称1),并通过调用SemiGlobalMatching类的Initialize成员函数给height_赋值。然后我又在grad_compute.h文件中新开了一个SemiGlobalMatching类的堆区,并把它赋给对象指针(姑且认为是名称2)。名称1和名称2并不是同一个东西,因此Grad类中并不能使用SemiGlobalMatching赋值好了的成员属性。代码如下:

main.cpp中的代码:

1 //main函数中实例化的SemiGlobalMatching对象
2 SemiGlobalMatching sgm;
1 //调用成员函数给height_属性传值
2 if (!sgm.Initialize(width, height, sgm_option))

部分SemiGlobalMatching.cpp中的代码:

1 bool SemiGlobalMatching::Initialize(const sint32& width, const sint32& height, const SGMOption& option)
2 {
3     // ··· 图像参数赋值
4     
5     // 影像尺寸
6     width_ = width;
7     height_ = height;

部分grad_compute.cpp中的代码:

1 bool Grad::SobelGradCompute(const uint8* img, sint8* imageSobelX, sint8* imageSobelY, float32* angle)
2 {
3 
4     semiGlobalMatching = new SemiGlobalMatching;
5     auto hight = semiGlobalMatching->height_;
6     auto width = semiGlobalMatching->width_;
7     cout << "grad_compute.cpp文件最终拿到的成员属性height_" << endl;
8     cout << semiGlobalMatching->height_<< endl;

结果如下:

 

 

 改进方法:

在“SobelGradCompute”成员函数的参数列表中加一个对象引用,用来接main函数中实例化好的SemiGlobalMatching类的对象这样就可以了!

在主函数中给Grad类的“SobelGradCompute”成员函数传递sgm对象:

1 Grad grad;
2 grad.SobelGradCompute(bytes_left, imgeX, imgeY, ang, sgm);

部分grad_compute.c中的代码:

1 bool Grad::SobelGradCompute(const uint8* img, sint8* imageSobelX, sint8* imageSobelY, float32* angle, const SemiGlobalMatching &sgm)
2 {
3 
4     auto hight = sgm.height_;  
5     auto width = sgm.width_;
6     cout << "grad_compute.cpp文件最终拿到的成员属性height_" << endl;
7     cout << sgm.height_ << endl;

*注意*引用访问成员的时候用“.”,指针访问成员的时候用“->”

 

标签:友元,const,height,SemiGlobalMatching,width,改进,sgm,使用,Grad
From: https://www.cnblogs.com/Sandals-little/p/16734803.html

相关文章

  • git 基本使用
    ​ 第一次安装git的时候要执行1-4步,否则从第5步开始安装git工具,安装完成之后鼠标右键只要出现 gitbashhere 菜单即说明安装成功。windows系统下载链接MAC下载链......
  • # react 使用 redux 状态管理器
    react使用redux状态管理器学习资料英文文档:https://redux.js.org/中文文档:http://www.redux.org.cn/Github地址:https://github.com/reactjs/redux是什么redux......
  • 在MVVM模式下使用命令传多个参数的问题
    最近碰到一个问题,在MVVM模式下进行命令传参时需要传递两个参数:例如类型和ID 解决方法如下<i:Interaction.Triggers><i:EventTriggerEventName=......
  • 【体验有奖】使用 Serverless 1 步搭建照片平台!
    实验介绍当前,Serverless技术已经被广泛应用,Serverless=FaaS+BssS的概念已经深入人心。本场景由函数计算和RDSMySQLServerless联合打造,通过函数计算的快速部署......
  • 使用polkadot.js在substrate frontier上安装ERC20token合约
    参考资料SubstrateFrontierNodeTemplategithub.com/substrate-developer-hub/frontier-node-templatefrontier-node-template/examples/contract-erc20/truffle/con......
  • redis 使用 全网最全最新内容汇总(每月更新一次)
    建立了一个群,大家可以加入进来,一起讨论程序员的相关话题,包括技术,升职,面试,职场,更重要的讨论如何通过技术赚钱。加+V:shiguanghui1001(时光会全拼),回复redis,免费赠送《全网re......
  • 2022 年你必须使用的 5 个令人惊讶的 React 工具:
    2022年你必须使用的5个令人惊讶的React工具:我们确实看到了一些最好的React开发工具。事实上,这使得开发人员几乎不可能选择他们最好的工具。尽管如此,开发人员应该......
  • python使用paramiko实现ssh定时执行命令
    原文https://www.cnblogs.com/Rosaany/p/16093521.html#!/usr/bin/envpython3#-*-coding:utf-8-*-#@Author:Rosaanyimportfunctoolsfromparamiko.ssh_exce......
  • 【原创】推流录屏软件OBS使用教程--录屏
    之前有录屏需要,写了一篇关于ffmpeg录屏的文章,反响还不错,但是直接用ffmpeg门槛有些高,今天写一篇图形界面的录屏推流工具OBS的使用教程。这次先写OBS的录屏教程下载安装......
  • arthas使用
    https://github.com/alibaba/arthas概览图https://user-images.githubusercontent.com/31468811/71954111-3010be00-321f-11ea-9900-e88195c2a570.png实用命令dashboar......