📜  虚拟函数可以在C++中私有吗?(1)

📅  最后修改于: 2023-12-03 15:11:54.008000             🧑  作者: Mango

虚拟函数可以在C++中私有吗?

在C++中,虚拟函数可以在类的公共(public)、私有(private)和保护(protected)部分中定义,但是虚拟函数只有在公共或保护部分中定义才能被派生类访问和重写。

为什么虚拟函数不能在私有部分中定义?

在C++中,派生类继承基类时,只会继承基类中的公共和保护成员。因此,如果将虚拟函数定义在类的私有部分中,派生类将无法访问该虚拟函数,从而无法重写该函数,导致虚函数失去了多态性。

能否使用私有虚拟函数?

虽然虚拟函数不能在私有部分中定义,但是可以在私有部分中声明虚拟函数。这个特性在C++中被称为“纯虚函数”,可以被用于实现抽象类。

下面是一个例子,使用纯虚函数实现抽象类:

class AbstractClass {
private:
    virtual void privateVirtualFunction() = 0; // 私有纯虚函数
public:
    virtual void publicVirtualFunction() { // 公有虚函数
        // 实现代码
    }
}

在这个例子中,虽然虚拟函数被定义在了私有部分,但是由于它是一个纯虚函数,派生类仍然可以实现该纯虚函数并访问基类的公共虚拟函数,从而实现多态性。

总结

在C++中,虚拟函数只能在公共和保护部分中定义,通过在基类中定义纯虚函数,可以实现抽象类的定义。虚拟函数是实现多态性的重要手段,合理使用虚拟函数可以提高代码的可维护性和扩展性。