C++ 子类使用父类对象构造
时间: 2023-10-06 20:10:05 浏览: 103
在 C++ 中,子类可以使用父类对象进行构造,这个过程叫做“对象切片”(Object Slicing)。对象切片的情况通常发生在以下场景中:
1. 子类继承了父类,并且子类没有定义自己的构造函数。
2. 子类定义了自己的构造函数,并且在构造函数中使用了父类的构造函数进行构造。
在第一种情况下,子类使用父类对象进行构造时,只会保留父类对象中的成员变量,而子类的成员变量则会被忽略。这是因为父类对象只包含父类的成员变量,而不包含子类的成员变量。
在第二种情况下,子类的构造函数必须调用父类的构造函数进行初始化,可以使用初始化列表或在构造函数的函数体中调用父类的构造函数。这样做的目的是为了保证父类的构造函数能够正确地初始化父类的成员变量。
以下是一个使用父类对象进行构造的示例代码:
```cpp
class Parent {
public:
int value;
Parent(int v) : value(v) {}
};
class Child : public Parent {
public:
Child(Parent p) : Parent(p) {}
};
int main() {
Parent p(10);
Child c(p);
std::cout << c.value << std::endl; // 输出:10
return 0;
}
```
在上面的代码中,子类 `Child` 继承了父类 `Parent`,并且定义了一个使用父类对象进行构造的构造函数。在 `main` 函数中,创建了一个父类对象 `p`,然后用它来创建一个子类对象 `c`。因为子类使用了父类对象进行构造,所以子类对象 `c` 中只包含了父类的成员变量 `value`,而没有子类的成员变量。
阅读全文