是不是一个父类写了一个virtual 函数,如果子类覆盖它的函数不加virtual ,也能实现多态 ?
                                             参考答案:
                                         
                                        是的,一个父类中的虚函数(virtual function)可以被子类覆盖(override)而不需要在子类的函数声明中再次使用virtual关键字。这是C++语言支持多态(polymorphism)的一种方式。
当你在父类中使用virtual关键字声明一个函数时,这个函数就被标记为虚函数。这意味着在运行时,根据对象的实际类型(动态绑定),而不是根据对象的声明类型(静态绑定),来调用相应的函数实现。
子类可以覆盖父类的虚函数,即使不在子类的函数声明中使用virtual关键字。编译器会根据函数签名(函数名和参数列表)来检查覆盖是否有效。如果子类提供了一个与父类虚函数签名相同的函数,那么子类的函数就会覆盖父类的函数,实现多态。
这里有一个简单的例子:
#include <iostream>
class Parent {
public:
    virtual void foo() {
        std::cout << "Parent::foo()" << std::endl;
    }
};
class Child : public Parent {
public:
    void foo() override {  // 使用override关键字是可选的,用于检查覆盖的有效性
        std::cout << "Child::foo()" << std::endl;
    }
};
int main() {
    Parent* ptr = new Child();
    ptr->foo();  // 输出 "Child::foo()",实现了多态
    delete ptr;
    return 0;
}
在这个例子中,Parent类有一个虚函数foo(),Child类覆盖了它。尽管Child类的foo()函数声明中没有使用virtual关键字,但它仍然成功地覆盖了父类的虚函数,并实现了多态。