简述什么是虚函数?什么是抽象函数 ?
参考答案:
虚函数和抽象函数都是C++面向对象编程中的重要概念,它们主要用于实现多态性。以下是它们的详细解释:
虚函数(Virtual Function):
在C++中,如果一个类中的成员函数被声明为虚函数,那么它就可以被子类中的同名函数重写(override)。当使用基类的指针或引用来调用这个函数时,实际执行的是指针或引用所指向对象的相应类型的函数,这就是动态绑定或运行时多态。
例如:
class Base {
public:
virtual void func() {
std::cout << "Base::func()" << std::endl;
}
};
class Derived : public Base {
public:
void func() override {
std::cout << "Derived::func()" << std::endl;
}
};
int main() {
Base* basePtr = new Derived();
basePtr->func(); // 输出 "Derived::func()"
delete basePtr;
return 0;
}
在上述代码中,Base
类中的func
函数被声明为虚函数,然后在Derived
类中被重写。在main
函数中,尽管basePtr
是一个指向Base
类的指针,但是调用func
函数时,执行的是Derived
类的func
函数。
抽象函数(Abstract Function):
抽象函数是一种特殊的虚函数,它在基类中没有定义(只有声明),需要由派生类提供具体的实现。含有至少一个抽象函数的类被称为抽象类,抽象类不能被实例化。抽象函数通常用于定义接口,这些接口需要在派生类中被实现。
例如:
class AbstractBase {
public:
virtual void abstractFunc() = 0; // 抽象函数
};
class Derived : public AbstractBase {
public:
void abstractFunc() override {
std::cout << "Derived::abstractFunc()" << std::endl;
}
};
在上述代码中,AbstractBase
类中的abstractFunc
函数是一个抽象函数,它在AbstractBase
类中没有定义,需要在派生类Derived
中被实现。由于AbstractBase
类包含抽象函数,因此它不能被实例化。
需要注意的是,抽象函数一定是虚函数,但虚函数不一定是抽象函数。一个虚函数可以有定义,而抽象函数则没有定义。