【C++】:跨C++多态表现问题
因为实际多态发生在C接口调用部分,因此跨C++成员函数是否标明virtual,虽然导致调用的函数不同,但是结果是相同的。
原生:
class Father {
virtual int area();
};
class Son : public Father {
int area();
};
跨C++:
namespace cpp2x {
class Father {
void *father_ptr;
int area() { return father_ptr->area(); };
};
class Son : public Father {
void *son_ptr;
int area() { return son_ptr->area(); }
};
// void *son_ptr = new Son();
// void *father_ptr = static_cast<Father *>(son_ptr);
Father *ptr = new Son();
int a = ptr->area();
} // namespace cpp2x
甚至移除virtual能帮助解决引用的问题。
Edited by chenyang.wang