关于C++类中counter变量与循环变量i关系的技术疑问
Shop类中counter与循环变量i的运行逻辑解释
我们一步步拆解代码的执行流程,就能明白为什么counter大于i但程序输出正确:
1. counter的初始化与三次set_price的执行过程
- 首先调用
initiate_counter(),把counter设置为0,这是第一个物品的下标起始值。 - 第一次调用
set_price():- 用当前
counter(0)作为下标,把输入的ID和价格存入Item_ID[0]和Item_price[0]。 - 执行
counter++,此时counter变成1。
- 用当前
- 第二次调用
set_price():- 用当前
counter(1)作为下标,存入Item_ID[1]和Item_price[1]。 counter++后变成2。
- 用当前
- 第三次调用
set_price():- 用当前
counter(2)作为下标,存入Item_ID[2]和Item_price[2]。 counter++后变成3。
- 用当前
此时counter的值是3,它代表的是已经添加的物品总数,而不是最后一个物品的下标。
2. display_price的循环逻辑
display_price()里的循环条件是for (int i = 0; i < counter; i++):
- 此时
counter是3,所以i会依次取0、1、2这三个值,正好对应之前存入物品的下标(0、1、2)。 - 循环会遍历所有已存储的物品,输出它们的ID和价格,完全匹配之前三次
set_price()存入的数据,所以结果正确。
核心逻辑总结
counter在这里的作用是双重的:
- 作为存储新物品时的数组下标(每次存完就自增,指向下次存储的位置)。
- 统计已添加的物品总数(最终值等于物品数量)。
因为数组下标从0开始,最后一个物品的下标是counter - 1,所以用i < counter作为循环条件,刚好能遍历所有已存储的元素,这是非常典型的“下标计数+总数统计”的写法。
你的完整代码
#include <iostream> using namespace std; class Shop { int Item_ID[100]; int Item_price[100]; int counter; public: void initiate_counter() { counter = 0; }; void set_price(); void display_price(); }; void Shop ::set_price() { cout << "Enter the ID of the item " << counter + 1 << endl; cin >> Item_ID[counter]; cout << "Enter the price of the item : " << endl; cin >> Item_price[counter]; counter++; } void Shop ::display_price() { for (int i = 0; i < counter; i++) { cout << "The price of the time with ID " << Item_ID[i] << " is " << Item_price[i] << endl; } } int main() { Shop dukaan; dukaan.initiate_counter(); dukaan.set_price(); dukaan.set_price(); dukaan.set_price(); dukaan.display_price(); return 0; }
内容的提问来源于stack exchange,提问作者Kritika Jethudi
相关产品推荐
相关产品推荐

