C++如何用循环简化DVD类实例赋值及打印的重复冗余代码?
优化方案
1. print调用逻辑优化
你写的多分支if判断完全不需要循环实现,直接通过下标映射即可一行完成,n从110对应DVD数组下标09,补充边界校验避免越界即可:
// 替换所有if判断代码 if (n >= 1 && n <= 10) { dvd[n-1].print(); }
你之前写的嵌套循环逻辑完全冗余,用下标映射是效率最高的实现方式。
2. DVD实例赋值优化
观察你的赋值规律:下标为k的dvd实例(0≤k≤9),对应的成员取值全部来自d数组的k*10 + 2到k*10 + 9区间,顺序对应id、name、genre、cast、desc、dateRent、dateRet、cost。你代码里出现的dvd[5]赋值顺序颠倒、dvd[8]重复赋值两次都属于手误,按规律修正后可以用单循环实现:
DVD dvd[10]; for (int k = 0; k < 10; k++) { int base = k * 10 + 2; dvd[k].id = d[base]; dvd[k].name = d[base + 1]; dvd[k].genre = d[base + 2]; dvd[k].cast = d[base + 3]; dvd[k].desc = d[base + 4]; dvd[k].dateRent = d[base + 5]; dvd[k].dateRet = d[base + 6]; dvd[k].cost = d[base + 7]; }
如果要进一步简化,可以给DVD类新增一个接收d数组偏移量的初始化方法,循环内仅需调用一次初始化方法即可,代码可读性会更高。
内容的提问来源于stack exchange,提问作者SiddTheKid
相关产品推荐
相关产品推荐

