以下代码代表了我的问题。
// File1.h
class A {
public:
void print() {
printf("This is class A.");
}
}
// File2.h
#include "File1.h"
class B: public A {
public:
void print() {
printf("This is class B.");
}
}
// File3.h
#include "File1.h"
void printClass(void* obj) {
A* aObj = (A*) obj;
aObj->print();
}
// Main.c
#include "File1.h"
#include "File2.h"
#include "File3.h"
void main(int argc, char* argv[]) {
B* bObj = new B;
printClass(bObj);
}
输出为“这是A类”。我需要它来打印“这是B类”。
我知道这似乎很愚蠢,但是由于实际代码的限制,我需要将可能是B类型的对象强制转换为A类型的对象。 文件3不了解类B。解释是这是一个框架,我希望人们在其中创建自己的派生类A,然后将其对象传递给框架,因此该框架不知道它将得到什么。这是A的派生类。
它必须将B的对象保持为空,因为我使用的是通用链表,节点上装有void *指针,在很多地方都使用相同的链表,因此我将其保持为通用。 / p>
有没有办法做到这一点?