1. 传递和返回结构
C++使用结构编程时,最直接的方式是处理基本类型那样来处理结构:也就是说,将结构作为参数传递,并在需要时将结构用作返回值使用。然而,按值传递结构有一个缺点。如果结构非常大,则复制结构将增加内存要求,降低系统运行的速度。 但是,当结构比较小时,按值传递结构最合理。
2. 一个例子
第一个例子处理行程时间。有些地图指出,从Thunder Falls 到Bingo城需要3小时50分钟,而从Bingo城到Gotesquo需要1小时25分钟。对于这种时间,可以使用结构表示————一个成员表示小时值,另一个成员表示分钟值。将两个时间加起来需要一些技巧,因为可能需要将分钟值转换成小时。例如,前面列出的两个时间的总和为4小时75分钟,应将它转换为5小时15分钟。下面开发用于表示时间值的结构,然后再开发一个函数,它接受两个这样的结构为参数,并返回表示参数的和的结构
#include<iostream>
struct tralvel_time
{
int hours;
int mins;
};
const int Mins_per_hr = 60;
tralvel_time sum(tralvel_time t1, tralvel_time t2);
void show_time(tralvel_time t);
int main(int argc, char const *argv[])
{
using namespace std;
tralvel_time day1 = {5, 45};
tralvel_time day2 = {4,55};
tralvel_time trip = sum(day1, day2);
cout << "Two-day total:";
show_time(trip);
tralvel_time day3 = {4,32};
cout << "Three-day total:";
show_time(sum(trip, day3));
return 0;
}
tralvel_time sum(tralvel_time t1, tralvel_time t2)
{
tralvel_time total;
total.mins = (t1.mins + t2.mins) % Mins_per_hr;
total.hours = t1.hours + t2.hours + (t1.mins+t2.mins) / Mins_per_hr;
return total;
}
void show_time(tralvel_time t)
{
using namespace std;
cout << t.hours << "hours, "
<< t.mins << "minutes\n";
}