c++ - 有没有办法将 child *返回到基地*并评估哪个 child *已返回?

标签 c++ oop class pointers inheritance

我试过这个没有用:

void Map::OnLMClick(short xPos, short yPos)
{
    SObject* pSObject = pEditWindow->GetSelectedItem();

    if (pSObject==SOTile)
    {
       /* Do */

我试过这个作为测试:

SObject* EditorWindow::GetSelectedItem()
{
    return pSOTile[1]; //pSOTile[1] is a valid pointer, member of EditorWindow
}

SOTile 类是基类 SObject 的子类。那么,是否可以创建一个 Base* 来返回其子项*之一,然后让程序根据返回的子项做出不同的 react ?如果是这样,那么我如何才能访问不是 base 成员的子成员的成员?

最佳答案

如果你的类型是多态的(即如果它们至少有一个虚函数),你可以使用dynamic_cast:

Base* pObject = get_object(); // May return a pointer to Derived
Derived* pDerived = dynamic_cast<Derived*>(pObject);

请注意,动态向下转型有时是糟糕设计的一个指标。尝试思考在您的层次结构中更好地安排虚函数是否会有所帮助。

在不了解具体应用领域的情况下,我无法给出更具体的建议。

关于c++ - 有没有办法将 child *返回到基地*并评估哪个 child *已返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15960145/

相关文章:

Android - 在后台运行 - 服务与标准 java 类

c++ - 如何使 Visual Studio 2013 显示未处理的异常消息?

c++ - "No appropriate default constructor available"-- 为什么还要调用默认构造函数?

c++ - 将引用变量初始化为类成员

C#-调用覆盖版本的方法的基本版本

python - "better"是哪个练习?在Python中传递对象引用或对象方法引用

php - MySQL 连接 : globally or in object?

c++ - UNIX 中的进程间通信

c++:简单的TCP服务器不接受来自客户端的数据

java - 创建方法是否被视为抽象?