有参构造函数实现函数复制
时间: 2023-04-10 15:03:51 浏览: 65
有参构造函数可以实现函数复制,通过将一个函数的参数传递给另一个函数的构造函数,可以创建一个新的函数对象,该对象与原始函数具有相同的行为和功能。这种方法可以用于创建函数的副本,以便在不修改原始函数的情况下进行修改和测试。
相关问题
表达式String("hello");会调用有参构造函数吗?
是的,表达式 `String("hello")` 将调用有参构造函数。在这种情况下,使用了一个字符串字面值 `"hello"` 来创建一个临时的 `String` 对象。
假设我们有一个 `String` 类,并且它有一个有参构造函数,用于接受一个 `const char*` 类型的参数:
```cpp
class String {
public:
String(const char* str) { /* 构造函数的实现 */ }
private:
char* data;
};
```
当我们执行 `String("hello")` 时,字符串字面值 `"hello"` 将隐式地转换为 `const char*` 类型的指针,并将该指针作为参数传递给有参构造函数。然后,该构造函数将使用传入的参数来创建一个 `String` 对象。
这样做的目的是方便使用字符串字面值来创建临时的 `String` 对象,而无需显式地分配内存并进行复制操作。通过重载构造函数,我们可以根据不同的参数类型来创建对象,以适应不同的使用场景。
用C++1.编写一个Person类 包括:(1)普通数据成员:姓名(char *),性别,年龄 (2)构造函数(无参、有参),复制构造函数 (3)析构函数 (4)printf函数:输出人员信息 (5)编写main函数,创建对象P1(使用无参构造函数),P2(使用有参构造函数),P3(复制P2)
以下是C++代码实现:
```c++
#include <iostream>
#include <cstring>
using namespace std;
class Person {
private:
char* name;
char gender;
int age;
public:
// 无参构造函数
Person() {
name = new char[1];
name[0] = '\0';
gender = ' ';
age = 0;
}
// 有参构造函数
Person(char* n, char g, int a) {
name = new char[strlen(n) + 1];
strcpy(name, n);
gender = g;
age = a;
}
// 复制构造函数
Person(const Person& p) {
name = new char[strlen(p.name) + 1];
strcpy(name, p.name);
gender = p.gender;
age = p.age;
}
// 析构函数
~Person() {
delete[] name;
}
// 输出人员信息
void printf() {
cout << "姓名:" << name << endl;
cout << "性别:" << gender << endl;
cout << "年龄:" << age << endl;
}
};
int main() {
// 创建对象P1(使用无参构造函数)
Person P1;
cout << "P1的信息:" << endl;
P1.printf();
// 创建对象P2(使用有参构造函数)
char name[] = "小明";
char gender = 'M';
int age = 18;
Person P2(name, gender, age);
cout << "P2的信息:" << endl;
P2.printf();
// 创建对象P3(复制P2)
Person P3(P2);
cout << "P3的信息:" << endl;
P3.printf();
return 0;
}
```
输出结果:
```
P1的信息:
姓名:
性别:
年龄:0
P2的信息:
姓名:小明
性别:M
年龄:18
P3的信息:
姓名:小明
性别:M
年龄:18
```
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.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)