在C++中,可以使用继承和多态来实现不同类型的通用接口之间的动态转换。下面是一个简单的代码示例:
#include
// 基类接口
class BaseInterface {
public:
virtual void print() = 0;
};
// 具体实现类A
class ClassA : public BaseInterface {
public:
void print() {
std::cout << "This is Class A" << std::endl;
}
};
// 具体实现类B
class ClassB : public BaseInterface {
public:
void print() {
std::cout << "This is Class B" << std::endl;
}
};
int main() {
// 创建ClassA对象
ClassA objA;
// 创建ClassB对象
ClassB objB;
// 使用基类指针指向具体对象
BaseInterface* ptrA = &objA;
BaseInterface* ptrB = &objB;
// 调用基类接口的print方法
ptrA->print(); // 输出: This is Class A
ptrB->print(); // 输出: This is Class B
// 将基类指针转换为具体对象的指针
ClassA* objPtrA = dynamic_cast(ptrA);
ClassB* objPtrB = dynamic_cast(ptrB);
// 判断转换是否成功
if (objPtrA != nullptr) {
std::cout << "Successfully cast to Class A" << std::endl;
} else {
std::cout << "Failed to cast to Class A" << std::endl;
}
if (objPtrB != nullptr) {
std::cout << "Successfully cast to Class B" << std::endl;
} else {
std::cout << "Failed to cast to Class B" << std::endl;
}
return 0;
}
在上面的示例中,我们定义了一个基类接口BaseInterface
,并派生了两个具体实现类ClassA
和ClassB
。然后,我们使用基类指针指向具体对象,并调用基类接口的print
方法。
接下来,我们使用dynamic_cast
动态将基类指针转换为具体对象的指针,并判断转换是否成功。如果转换成功,就可以使用具体对象的指针来调用该类特有的方法。
注意,在使用dynamic_cast
进行类型转换时,需要将基类的析构函数声明为虚函数,以确保正确地调用子类的析构函数。