定义一个普通函数father,并在main测试如下。请解释编译错误原因,并提出修改方法。 分析在这个过程中,调用了几次构造函数,分别是哪个地方调用什么构造函数。 Person father(const Person& p) {p.change _addr(“Fuzhou”); Person wangwu( ”wangwu”,”China”,”234567”) ; return wangwu; } int main( ) {Person Lisi(”lisi”,”China”,”123456”); Lisi.change_addr(“Fuzhou”); Person dad=father(Lisi); return 0; }
时间: 2023-06-20 13:10:01 浏览: 80
下面是修改后的代码:
```c++
#include <iostream>
#include <string>
using namespace std;
class Person {
private:
string name;
string country;
string phone;
string address;
public:
Person(string n, string c, string p) : name(n), country(c), phone(p) {}
void change_addr(string a) { address = a; }
void change_phone(string p) { phone = p; }
void change_country(string c) { country = c; }
void change_name(string n) { name = n; }
};
Person father(const Person& p) {
Person wangwu("wangwu", "China", "234567");
wangwu.change_addr("Fuzhou");
return wangwu;
}
int main() {
Person Lisi("lisi", "China", "123456");
Lisi.change_addr("Fuzhou");
Person dad = father(Lisi);
return 0;
}
```
在 `father` 函数中调用了 `Person` 类的构造函数创建了一个新的对象 `wangwu`,同时调用了 `change_addr` 函数修改了 `wangwu` 的 `address` 属性。然后将 `wangwu` 对象作为返回值返回给 `main` 函数中的 `dad` 变量。
由于 `Person` 类没有默认构造函数,所以在创建 `wangwu` 对象时需要调用带参数的构造函数。同时,在 `father` 函数中将 `p` 作为参数传递给 `wangwu` 时,需要使用 `const` 引用来避免不必要的复制操作。
编译错误的原因可能是代码中使用了未定义的变量或函数,或者存在语法错误。在这个代码中,可能存在的问题是调用了未定义的构造函数或者传递参数时使用了错误的语法。修改后的代码已经解决了这些问题。
阅读全文