函数覆盖不工作在c + +
问题描述:
class parent
{
public:
virtual void print()
{
printf("STUFF");
}
};
class child : public parent
{
public:
virtual void print()
{
printf("other stuff");
}
};
int main()
{
parent par = new child;
par.print();
}
当我试过这个,它总是使用父功能,而不是子功能。我试图让它使用子功能。函数覆盖不工作在c + +
答
class parent
{
public:
virtual void print()
{
printf("STUFF");
}
};
class child : public parent
{
public:
virtual void print()
{
printf("other stuff");
}
};
int main()
{
parent *par = new child;
par->print();
delete par;
par = NULL;
}
+1
你刚刚教一个新手怎么做不做内存管理。恭喜。 – 2014-09-11 13:40:05
因为par是一个父类型变量,您的孩子将立即转给父母。如果你想调用孩子的功能,使用基类的指针或引用,如:'parent&par = new child();' – Melkon 2014-09-11 12:20:12
'parent par = new child;'这行不应该编译 – Geoffroy 2014-09-11 12:20:14
如果你的真实代码就像'parent par = *(new child);'那么这是因为你正在复制对象的父对象,并丢弃(并泄漏)你从其复制的''''对象。如果它实际上是'parent * par = ...'和'parent-> print()',那么你应该看到孩子的覆盖。如果没有看到实际编译的代码,我们无法猜测它出了什么问题。 – 2014-09-11 12:23:39