在类中,怎么实现多个构造函数(形参相同)
时间: 2024-09-22 19:05:02 浏览: 48
在C++中,为了实现多个构造函数共享相同的形参列表,但有不同的初始化行为,你可以使用“析构式构造”(Destructor Initialization)。这是通过在一个构造函数内调用另一个构造函数来完成的。这种方式允许你在一个构造函数中提供默认参数或者执行其他特殊初始化步骤。
举个例子,假设你有一个`Person`类,有两个构造函数,它们共享基本信息但有年龄的不同处理方式:
```cpp
class Person {
public:
// 析构式构造
explicit Person(int age = 0, const std::string& name = "") : age(age), name(name) {}
// 具体的构造函数,用于接受特定年龄
Person(int special_age, const std::string& name)
: Person(special_age, name) {} // 调用了默认参数的构造函数
private:
int age;
std::string name;
};
```
在这个例子中,当你直接创建一个`Person`对象时(`Person person;`),默认构造函数会被调用,如果没有指定`name`,`age`将被初始化为0。而当你传递特定年龄时(`Person person(30, "Alice");`),第二个构造函数会被调用,传入的`special_age`会被用于设置`age`,`name`则保持默认值。
相关问题
c++类做构造函数的形参怎么赋默认参数
在C++中,可以通过在构造函数的形参列表中为参数提供默认值来实现构造函数的形参赋默认参数。具体的语法如下:
```cpp
class MyClass {
public:
// 构造函数
MyClass(int param1 = defaultValue1, int param2 = defaultValue2) {
// 构造函数的实现
}
};
```
在上面的代码中,`MyClass`是一个类名,`param1`和`param2`是构造函数的形参,`defaultValue1`和`defaultValue2`是对应形参的默认值。当创建`MyClass`对象时,如果没有提供相应的参数值,则会使用默认值进行初始化。
需要注意的是,如果某个形参有默认值,那么它后面的所有形参都必须有默认值。此外,如果在类定义中同时声明和定义了构造函数,那么该构造函数就是一个非内联的构造函数,需要在类外进行定义。
类对象作为函数形参时,拷贝构造函数是在什么时候调用
当将一个类对象作为函数的参数传递时,拷贝构造函数会被调用。这是因为在函数调用时,需要将实参复制到形参中,如果形参是一个类对象,那么就需要使用拷贝构造函数来完成这个复制过程。拷贝构造函数会创建一个新的类对象,其成员变量的值与原对象相同,但是它们在不同的内存地址中。
需要注意的是,如果形参是一个引用类型,那么拷贝构造函数不会被调用。此时,实参和形参都指向同一个对象。
阅读全文