首页 > 编程语言 >c++引用与结构

c++引用与结构

时间:2023-02-24 14:01:03浏览次数:37  
标签:ft target c++ free 引用 accumulate throws 结构

引用非常适合用于结构和类,使用结构引用参数的方式与使用基本变量引用相同,只需在声明结构参数时使用引用运算符&即可。

struct free_throws {

string name;
int mode;
int attempts;
float percent;

};
void display(const free_throws &ft);
void set_pc(free_throws &ft);

free_throws & accumulate(free_throws &target,const free_throws &source);

int main(){

free_throws one = {"aaa",13,14};
free_throws team = {"eeee",0,0};

set_pc(one);
display(one);
accumulate(team,one);
display(team);
display(accumulate(team,one));
}

void display(const free_throws &ft){

cout << ft.name << endl;
cout << ft.mode << endl;
cout << ft.attempts << endl;
cout << ft.percent << endl;

}

void set_pc( free_throws &ft){

if(ft.attempts!=0)
ft.percent = 100.0f*float(ft.mode)/float(ft.attempts);
else
ft.percent = 0;

}

free_throws & accumulate(free_throws &target,const free_throws &source){

target.attempts += source.attempts;
target.mode += source.mode;
set_pc(target);
return target;

}

set_pc方法需要修改结构体中成员percent,所以需要传递引用,然后调用display显示各个成员的值,由于不需要修改,所以定义为const引用。accumulate函数需要修改第一个参数,并且返回的是第一个参数的引用。display函数把结构体信息打印出来。

如果accumulate返回类型被声明为free_throws而不是free_throws&,上述返回语句将返回target(也就是team)的拷贝。

为什么accumulate要返回引用?

free_throws dup = accumulate(team,one);

如果accumulate()返回一个结构,而不是指向结构的引用,将把整个结构复制到一个临时位置,再将这个拷贝复制给dup。但在返回值为引用时,将直接把team复制到dup,其效率更高。

返回引用时最重要的一点是,应避免返回函数终止时不再存在的内存单元引用。

const free_throws & clone(free_throws &ft){
free_throws newguy;
newguy = ft; //这里会把ft的内容拷贝到newguy
return newguy; //返回后newguy内存不存在
}

为避免这种问题,最简单的方法是,返回一个作为参数传递给函数的引用。作为参数的引用将指向调用函数使用的数据,因此返回的引用也将指向这些数据。

标签:ft,target,c++,free,引用,accumulate,throws,结构
From: https://blog.51cto.com/u_3764469/6083893

相关文章

  • vscode配置C++文件简记
    今天终于把vscode配置好了,这个玩意跟大爷一样难伺候。我也懒得写博客记录过程了,太麻烦了。而且我已经耽误太长时间在这里了,不想再经历一次了。我这里简单记录一下我遇到的......
  • 数据结构(借鉴408)-线性表
    数据结构逻辑结构、物理结构时间复杂度、空间复杂度线性表顺序表#defineMAX_SIZE100typedefintElemType;typedefstructseqlist{ ElemTypedata[MAX_SIZE];......
  • 如何在VC++ 6.0中实现拖动指令改变执行路径?
    前文提要:在VC6.0之后出现的VS系列开发工具都具有的调试功能:移动指针更改执行流,VC6不支持这个UI操作。调试程序暂停时,源代码或“反汇编”窗口边距处的黄色箭头标记要运......
  • c++中具有继承关系的隐式转换问题
    起因是群里有人问:   2,3,4是为什么。解答:2:2是因为B中的show(A)才是多态,Aa2=newB(),此时a2只有show(A)的多态,而面对的类型切割问题,在编译的时候派生类会将基类的多......
  • 1.1 CPU的内部结构解析
    一、CPU CPU是寄存器的集合体,包括累加、标志、程序计数器(决定程序流程)、基址、变址、通用、指令和栈寄存器。 CPU和内存是由许多晶体组成的电子部件,通常称为IC(Integ......
  • 【Java数据结构和算法】002-数据结构和算法概述
    目录​​一、数据结构和算法的关系​​​​二、实际编程中遇到的问题​​​​1、一段Java代码​​​​代码:​​​​问题:​​​​2、一个五子棋程序​​​​图示:​​​​问题......
  • BOSHIDA 三河博电科技 电源模块 PLC的硬件结构配置与工作原理
    BOSHIDA三河博电科技电源模块PLC的硬件结构配置与工作原理中、大型PLC的结构外型,它通常采用积木式结构,可以根据需要将各种标准模块进行搭接,常用的模块有电源模块、CPU......
  • 第十节:node实操(基础结构搭建、注册、登录、jwt校验、路由自动化等)
    一.        二.        三.         !作       者:Yaopengfei(姚鹏飞)博客地址:http://www.cnblog......
  • 循环结构
    循环结构概念​ 循环结构是为了重复的执行某些代码而生的;​ 循环结构有四要素:1.初始化循环变量(初始化条件),2.循环条件(条件判断),3.循环体,4.修改变量(迭代);分类​ whi......
  • 数据结构和算法-小甲鱼【笔记】
    数据结构和算法-小甲鱼鱼C工作室序论程序设计=数据结构+算法数据结构就是关系--数据元素相互之间存在的一种或多种特定关系的集合逻辑结构:数据对象中数据元素间......