3修改练习4中的程序,将B类中定义的字段变量更改为静态对象。输出将发生什么变化?
时间: 2024-02-13 19:06:10 浏览: 26
练习4中的程序是:
```c++
#include<iostream>
using namespace std;
class A {
public:
int num;
A(int n):num(n) {}
};
class B {
public:
static A a;
void print() {
cout << a.num << endl;
}
};
A B::a = A(100);
int main() {
B b1, b2;
b1.print();
b2.print();
b1.a.num = 200;
b2.print();
return 0;
}
```
将B类中定义的字段变量更改为静态对象,只需要将`A a`改为`static A a`即可。修改后的程序如下:
```c++
#include<iostream>
using namespace std;
class A {
public:
int num;
A(int n):num(n) {}
};
class B {
public:
static A a;
void print() {
cout << a.num << endl;
}
};
static A B::a = A(100);
int main() {
B b1, b2;
b1.print();
b2.print();
b1.a.num = 200;
b2.print();
return 0;
}
```
在该程序中,B类中的`a`字段变量被改为静态对象后,每个B类对象共享同一个静态变量`a`,即`a`只有一个副本。因此,无论是通过`b1`还是`b2`来修改`a`的`num`值,都会影响到所有B类对象的输出结果。输出结果如下:
```
100
100
200
```
可以看到,当`b1`和`b2`的`print`函数被调用时,输出的结果都是100,这是由于在静态变量被初始化时,将其初始化为了100。当`b1`的`a.num`被修改为200后,再次调用`b2`的`print`函数时,输出结果变为了200。这表明静态变量`a`被所有B类对象共享,修改一个对象的`a.num`值会影响到所有对象。
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)