<分区>
在c++中,基类中的虚函数可以在派生类中被覆盖。 和一个成员函数,其中具体实现将取决于运行时调用它的对象的类型。
由于必须实现虚函数(纯虚除外) 我可以在基类中使用常规函数并在派生类中重新定义它吗? 如果是。 使用虚函数有什么意义?
谢谢
<分区>
在c++中,基类中的虚函数可以在派生类中被覆盖。 和一个成员函数,其中具体实现将取决于运行时调用它的对象的类型。
由于必须实现虚函数(纯虚除外) 我可以在基类中使用常规函数并在派生类中重新定义它吗? 如果是。 使用虚函数有什么意义?
谢谢
最佳答案
您可以重新定义它,但它不会以多态方式工作。
如果我有一个
class base
{
int foo(){ return 3; }
};
class Der : public base
{
int foo() {return 5;}
};
然后有一个接受基数的函数
void dostuff(base &b)
{
b.foo(); // This will call base.foo and return 3 no matter what
}
我是这样调用它的
Der D;
dostuff(D);
现在如果我把基数改成
class base
{
virtual int foo(){ return 3; }
};
void dostuff(base &b)
{
b.foo(); // This will call the most derived version of foo
//which in this case will return 5
}
所以真正的答案是,如果您想编写将从基础调用正确函数的通用代码,则它需要是虚拟的。
关于c++ - 为什么使用虚函数而不是常规函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19440989/