C++父类指针创建子类对象,如何将该指针里面的内容拷贝到另一个父类指针
时间: 2023-11-02 12:27:45 浏览: 142
在 C++ 中,可以通过父类指针创建子类对象,但是在将该指针里面的内容拷贝到另一个父类指针时,需要注意:
1. 父类指针所指向的子类对象必须是已经存在的,否则拷贝的内容没有意义;
2. 父类指针只能访问子类的公有成员,而不能访问子类的私有成员;
3. 如果子类中有虚函数,那么在进行指针拷贝时,需要使用虚函数表来保证多态性。
具体实现可以使用 `dynamic_cast` 运算符来进行类型转换,示例如下:
```c++
#include <iostream>
class Base {
public:
virtual void print() {
std::cout << "This is Base class" << std::endl;
}
};
class Derived : public Base {
public:
void print() override {
std::cout << "This is Derived class" << std::endl;
}
};
int main() {
Base* p_base = new Derived(); // 通过父类指针创建子类对象
Base* p_copy = nullptr;
// 将 p_base 指向的子类对象拷贝到 p_copy 指向的父类对象中
if (auto p_derived = dynamic_cast<Derived*>(p_base)) {
p_copy = new Derived(*p_derived);
}
// 调用父类指针的虚函数,输出 This is Derived class
p_copy->print();
delete p_base;
delete p_copy;
return 0;
}
```
在以上代码中,先通过父类指针 `p_base` 创建一个子类对象 `Derived`,然后使用 `dynamic_cast` 将 `p_base` 转换为子类指针 `p_derived`,再通过拷贝构造函数将子类对象拷贝到父类指针 `p_copy` 中。最后调用 `p_copy` 的虚函数 `print` 输出 "This is Derived class"。
阅读全文