如何重新键入指向类的指针,并能够根据类型来达到类函数?

时间:2011-08-18 18:51:37

标签: c++

我正在编写一个C ++代码,它应该根据对象指针启动时的函数来填充屏幕(并且它的行为)。让我们更好地在代码上显示它:

class A:parentClass {
public:
    int X () {return 5;}
}

class B:parentClass {
public:
    int X () {return 3;}
}

class C:parentClass {
public:
    int X () {return 1;}
}

main {
    parentClass *p;
    p = new A;
    printf("%d\n,p.x); //to return 5
    delete p;
    p = new B;
    printf("%d\n,p.x); //to return 3
}

我在编译时遇到这样的事情:

‘class parrentClass’ has no member named ‘x’

我知道这是错的,因为parrentClass根本就没有那个成员,但我不知道如何解决这个问题。我试图通过模板,但我没有到达任何地方。

我还试图替换“parentClass * p;”用“int * p;”,但后来我得到了:

cannot convert ‘CardsFrame*’ to ‘int*’ 

提前感谢您的建议,

3 个答案:

答案 0 :(得分:4)

您需要在父类上声明X()方法virtual才能使其正常工作:

class ParentClass
{
    public:
        virtual int X();
};

要明确:以下是一个完整的工作示例(使用gcc编译):

#include <iostream>

class ParentClass {
public:
    virtual int x() = 0;
};

class A : public ParentClass {
public:
    int x() { return 5; }
};

class B : public ParentClass {
public:
    int x() { return 3; }
};

class C : public ParentClass {
public:
    int x() { return 1; }
};

int main() {
    ParentClass *p;
    p = new A;
    std::cout << p->x() << std::endl; // prints 5
    delete p;
    p = new B;
    std::cout << p->x() << std::endl; // prints 3
    delete p;
}

答案 1 :(得分:2)

你真的需要掌握你的基础知识,因为你的语法都错了。您需要使用p->X()来调用该函数。并在基类中回答实际问题make X() virtual

答案 2 :(得分:1)

printf("%d\n,p.x); //to return 5

应该是:

printf("%d\n,p->X()); //to return 5

此外,X()在Base类中应该是虚拟的。