我正在编写一个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*’
提前感谢您的建议,
扬
答案 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类中应该是虚拟的。