函数重写不在C++中工作
每当我尝试此操作时,它总是使用父函数而不是子函数。我试图让它使用子函数。因为PAR是父类型变量,您的孩子将立即被铸造成父级。如果您想调用子函数,则使用指针或引用到基类,例如:父和PAR =新的子;父母Par =新的孩子;如果你的真实代码是像父PAR=新的孩子一样,这条线就不能编译了。这是因为您正在复制对象的父部分,并丢弃和泄漏从中复制的子对象。如果它实际上是父母* PAR=…和parent->print,然后应该可以看到子对象的覆盖。在没有看到您实际编译的代码的情况下,我们无法猜测它有什么问题。顺便说一下,这是重写,而不是重载。重载是指同一作用域中的两个函数具有相同的名称,但在某些方面有所不同。重写是指派生类重新定义父类的虚拟函数。代码不会编译。请给出问题中描述的错误代码。你刚刚教了一个新手如何不进行内存管理。祝贺你。@LightnessRacesBY-SA3.0你真的因为他使用了指针而生气了吗?@LightnessRacesBY-SA3.0使用指针有什么问题?@Andrew指针很好,在这种情况下,有必要。不过,在这里根本不需要动态分配。这个答案告诉我们这是真的。这是错误的。时期咨询你的C++书籍获取更多信息。@安得烈,我没有删除它;现在有很多国防部的审查制度函数重写不在C++中工作,c++,oop,overloading,C++,Oop,Overloading,每当我尝试此操作时,它总是使用父函数而不是子函数。我试图让它使用子函数。因为PAR是父类型变量,您的孩子将立即被铸造成父级。如果您想调用子函数,则使用指针或引用到基类,例如:父和PAR =新的子;父母Par =新的孩子;如果你的真实代码是像父PAR=新的孩子一样,这条线就不能编译了。这是因为您正在复制对象的父部分,并丢弃和泄漏从中复制的子对象。如果它实际上是父母* PAR=…和parent->print,然后应该可以看到子对象的覆盖。在没有看到您实际编译的代码的情况下,我们无法猜测它有什么问题。
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();
}
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;
}