Cplusplus获取对象类型动态生成对应对象
时间: 2023-09-29 17:11:19 浏览: 92
C++动态生成对象
4星 · 用户满意度95%
在 C++ 中,可以使用 RTTI(Run-Time Type Information)机制来获取对象的类型信息。具体步骤如下:
1. 在基类中声明虚函数:在基类中声明一个虚函数,可以使得子类通过重写该函数来实现不同的行为。例如:
```
class Base {
public:
virtual void showType() {
std::cout << "This is a Base object." << std::endl;
}
};
```
2. 创建子类:创建一个或多个子类,重写基类的虚函数,并实现不同的行为。例如:
```
class DerivedA : public Base {
public:
void showType() override {
std::cout << "This is a DerivedA object." << std::endl;
}
};
class DerivedB : public Base {
public:
void showType() override {
std::cout << "This is a DerivedB object." << std::endl;
}
};
```
3. 动态生成对象:使用 new 运算符动态生成一个对象,并将其指针保存到基类指针中。例如:
```
Base* objPtr = new DerivedA();
```
4. 获取对象类型:使用 dynamic_cast 运算符将基类指针转换为子类指针,然后使用 typeid 运算符获取对象的类型信息。例如:
```
if (DerivedA* aPtr = dynamic_cast<DerivedA*>(objPtr)) {
std::cout << "Object type: " << typeid(*aPtr).name() << std::endl;
} else if (DerivedB* bPtr = dynamic_cast<DerivedB*>(objPtr)) {
std::cout << "Object type: " << typeid(*bPtr).name() << std::endl;
} else {
std::cout << "Unknown object type." << std::endl;
}
```
这里使用 dynamic_cast 运算符将基类指针 objPtr 转换为 DerivedA 指针 aPtr,如果转换成功,则说明 objPtr 指向的是 DerivedA 对象,输出对应的类型信息;否则继续使用 dynamic_cast 运算符将 objPtr 转换为 DerivedB 指针 bPtr,如果转换成功,则说明 objPtr 指向的是 DerivedB 对象,输出对应的类型信息;否则输出未知类型信息。注意:必须使用虚函数来实现多态性,否则 dynamic_cast 运算符将无法正确转换对象类型。
阅读全文