dynamic_cast
时间: 2023-06-24 22:04:17 浏览: 64
`dynamic_cast`是C++中的一个运算符,用于在运行时进行类型转换。它用于将一个基类指针或引用转换为派生类指针或引用,以便可以调用派生类特有的成员函数或访问派生类特有的成员变量。如果转换成功,则返回指向派生类对象的指针或引用;如果转换失败,则返回空指针或引用。
例如,假设我们有一个基类Animal和两个派生类Dog和Cat:
```
class Animal {
public:
virtual ~Animal() {}
};
class Dog : public Animal {
public:
void bark() { std::cout << "Woof!" << std::endl; }
};
class Cat : public Animal {
public:
void meow() { std::cout << "Meow!" << std::endl; }
};
```
现在我们定义一个指向Animal对象的指针,并将其指向一个Dog对象:
```
Animal* animal = new Dog;
```
如果我们想要调用Dog特有的成员函数bark,就需要将animal指针转换为Dog指针。这可以使用dynamic_cast来实现:
```
Dog* dog = dynamic_cast<Dog*>(animal);
if (dog != nullptr) {
dog->bark();
}
```
在这个例子中,如果animal指向的是Dog对象,则dynamic_cast将返回一个指向Dog对象的指针,我们就可以调用bark函数了。如果animal指向的是Cat对象或其他类型的对象,则dynamic_cast将返回空指针,我们就需要进行相应的错误处理。
阅读全文