修改class Box { int capacity; public: Box(int cap){ capacity = cap; },将B类中定义的字段变量更改为静态对象。输出将发生什么变化?
时间: 2024-02-13 21:06:11 浏览: 19
将Box类中定义的字段变量`capacity`更改为静态对象,只需要将`int capacity`改为`static int capacity`即可。修改后的Box类如下:
```c++
class Box {
static int capacity;
public:
Box(int cap){
capacity = cap;
}
friend void showCapacity(Box b);
};
int Box::capacity = 0;
void showCapacity(Box b) {
cout << "Box capacity is: " << b.capacity << endl;
}
```
在该修改后的Box类中,`capacity`被更改为静态对象,即`static int capacity`,并且在类外定义了该静态变量,初始值为0。因为静态变量是该类所有对象共享的,所以当一个对象修改该静态变量的值后,会影响到所有对象对该静态变量的访问。因此,当调用`showCapacity`函数时,输出的容量值将会被最后一个创建的Box对象的构造函数所赋值。例如,如果在主函数中添加以下代码:
```c++
int main() {
Box b1(10), b2(20), b3(30);
showCapacity(b1);
showCapacity(b2);
showCapacity(b3);
return 0;
}
```
则输出结果如下:
```
Box capacity is: 30
Box capacity is: 30
Box capacity is: 30
```
可以看到,无论是哪个Box对象调用`showCapacity`函数,输出的容量值都是30,这是因为最后一个创建的Box对象是`b3`,其构造函数将capacity赋值为30,所有Box对象对该静态变量的访问都是访问同一个副本。