c++中dynamic_cast的用法
C++中的dynamic_cast是一种强制转换类型,主要用于基类和派生类之间的指针类型的转换,下面我们以一个动物类来介绍他的用法。
源码分析
#include <iostream>
#include<vector>
using namespace std;
class Animal
{
public:Animal()
{
cout << "Animal" << endl;
}
virtual void speak() = 0;
private:
};
class Dog :public Animal
{
public:Dog()
{
cout << "Dog" << endl;
}
virtual void speak()
{
cout << "wang" << endl;
}
void swim()
{
cout << "swim" << endl;
}
};
class Cat :public Animal
{
public:Cat()
{
cout << "Cat" << endl;
}
virtual void speak()
{
cout << "miao" << endl;
}
};
int main() {
int N;
cout << "请输入N的值:";
cin >> N;
vector<Animal*> v;
for (int i = 0; i < N; i++)
{
v.push_back(new Dog);
v.push_back(new Cat);
}
for (auto Animal : v)
{
Animal->speak();
if (Dog* dog = dynamic_cast<Dog*>(Animal))
{
dog->swim();
}
delete Animal;
}
return 0;
}
解释: 我们可以看到上述代码定义了三个类,dog类和cat类继承了animal类中的公共属性,且基类中的speak函数为纯虚函数。 在main函数中的if语句的判定条件里,我们可以看到,如果animal类型的指针指向了dog的对象,然后动态转化为了dog类的指针,那么dog就会调用swim函数。 此外,还有两种转换情况: 1.基类指针指向基类对象,这时候是无法动态转换为子类指针的 2.动态转换还可以传入引用,指向子类对象的基类引用可以转换为指向子类的引用。 例如:Dog* &dog = dynamic_cast<Dog*>(*Animal)
|