2011-08-18 101 views
1

我正在写一个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;”与 “诠释* P;”,但后来我发现了:

cannot convert ‘CardsFrame*’ to ‘int*’ 

感谢提前你的建议,

+1

这不是你真正的代码(如果是的话,有大约200个错误的东西)。请张贴您实际编译的代码,如果代码太大,则编写一个可编译的示例程序(除了您要查询的部分外)。 –

+1

你的class parentClass声明在哪里? –

回答

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

应该是:

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

另外,X()应该在基类中是虚拟的。

2

因为你的语法都是错误的,所以你确实需要让你的基础知识正确。您需要使用p->X()来调用该功能。并回答基础类中的实际问题X()virtual

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; 
} 
+0

感谢您投入的精力!这就是我正在寻找的! 对于其他人我很抱歉,我的第一个代码是垃圾,我会尝试下次编译我的例子。 Jan – Jan