C++PrimerPlus(第6版)中文版:Chapter8.2.4_Example8.6strc_ref.cpp

本文展示了C++中结构体引用的应用,包括初始化、累计射门统计和计算进球率等功能。通过`display`、`set_pc`和`accumulate`等函数,详细解释了如何使用引用进行数据操作和传递。程序最终输出了不同球员的射门统计数据,并演示了引用在赋值和函数返回值中的使用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引用非常适合于结构和类,下面的例子就演示了这一点。

// Chapter8.2.4_Example8.6strc_ref.cpp.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
// Chapter8.2.4_Example8.6strc_ref.cpp.cpp :本例子演示将引用应用于结构

#include <iostream>
#include <string>
struct  free_throws
{
    std::string name;
    int made;
    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()
{
  //  std::cout << "Hello World!\n";
    //部分初始化-其他的成员初始化为0
    free_throws  one= {"Ifelsa Branch",13,14};
    free_throws  two=  { "Andor Knott",10,16 };
    free_throws three= { "Minnie Max",7,9 };
    free_throws four= { "Whily Looper",5,9 };
    free_throws five= { "Long Long",6,14 };
    free_throws team= { "Throwgoods",0,0 };
    //未做初始化
    free_throws dup;
    set_pc(one);
    display(one);
    accumulate(team,one);
    display(team);

    //使用返回值作为参数
    display(accumulate(team, two));
    accumulate(accumulate(team,three),four);
    display(team);

    //使用返回值赋值
    dup = accumulate(team, five);
    std::cout << "Displaying team:\n";
    display(team);
    std::cout << "Displaying dup after assignment:\n";
    display(dup);
    set_pc(four);
    //不好的赋值
    accumulate(dup,five) = four;
    std::cout << "Displaying dup after ill-advised assignment:\n";
    display(dup);
    return 0;
}
void display(const free_throws & ft)
{
    using std::cout;
    cout << "Name:" << ft.name << '\n';
    cout << "Made:" << ft.made << '\n';
    cout << "Attempts:" << ft.attempts << '\n';
    cout << "Percent:" << ft.percent << '\n';
}
void set_pc(free_throws& ft)//该函数的功能是计算已经进球和射门次数的比值,就是进球率了,set_pc 代表设置百分比
{
    if (ft.attempts != 0)
        ft.percent = 100.0f * float(ft.made) / float(ft.attempts);
    else
        ft.percent = 0;    
}
free_throws& accumulate(free_throws& target, const free_throws& source)//这是累计起来的射门次数和已经的进球
{
    target.attempts += source.attempts;
    target.made += source.made;
    set_pc(target);
    return target;

}

运行结果:

Name:Ifelsa Branch
Made:13
Attempts:14
Percent:92.8571
Name:Throwgoods
Made:13
Attempts:14
Percent:92.8571
Name:Throwgoods
Made:23
Attempts:30
Percent:76.6667
Name:Throwgoods
Made:35
Attempts:48
Percent:72.9167
Displaying team:
Name:Throwgoods
Made:41
Attempts:62
Percent:66.129
Displaying dup after assignment:
Name:Throwgoods
Made:41
Attempts:62
Percent:66.129
Displaying dup after ill-advised assignment:
Name:Whily Looper
Made:5
Attempts:9
Percent:55.5556

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值