为什么以下程序会导致错误?#include <iostream> #include <string> using namespace std; class B { int b; public: B(){} B(int i){ b = i; } int show(){ return b; } }; class C { B b; public: C(int i){ b = B(i); } friend void show(){ C c(10); cout<<"value of b is: "<<c.b.show()<<endl; } }; int main(){ C c(1); c.show(); return 0; }
时间: 2024-01-14 18:03:54 浏览: 59
这个程序会导致错误,因为在C类的友元函数show的实现中,你试图创建一个名为c的C类的对象,然后访问其成员变量b的show函数。然而,在show函数中,C类的对象是在函数内部创建的,并且在show函数返回后将被销毁。因此,访问c.b.show()将导致未定义的行为。
要解决这个问题,你可以在main函数中创建C类的对象,然后调用其show函数。以下是修复后的示例代码:
```c++
#include <iostream>
#include <string>
using namespace std;
class B {
int b;
public:
B() {}
B(int i) {
b = i;
}
int show() {
return b;
}
};
class C {
B b;
public:
C(int i) {
b = B(i);
}
friend void show(C c) { // 修改为带参数的友元函数
cout << "value of b is: " << c.b.show() << endl;
}
};
int main() {
C c(10);
show(c); // 调用友元函数,并传递C类的对象作为参数
return 0;
}
```
现在,在main函数中创建C类的对象,并将其传递给友元函数show。在show函数中,你可以访问C类的对象的成员变量b的show函数,并输出"value of b is: 10"。
阅读全文