跳到主要内容

C++中virtual和inline的含义分别是什么?

参考答案:

在C++中,virtualinline是两种不同的关键字,它们各自有不同的用途和含义。

  1. virtual

virtual关键字在C++中主要用于实现多态性(polymorphism)。多态性是面向对象编程的一个重要特性,它允许你使用基类的指针或引用来调用在派生类中重写的函数。当你有一个基类的指针或引用指向一个派生类对象,并且你调用一个虚函数时,会调用该派生类的版本,而不是基类的版本。

例如:

class Base {
public:
    virtual void foo() { std::cout << "Base::foo()" << std::endl; }
};

class Derived : public Base {
public:
    void foo() override { std::cout << "Derived::foo()" << std::endl; }
};

int main() {
    Base* basePtr = new Derived;
    basePtr->foo();  // 输出 "Derived::foo()"
    delete basePtr;
    return 0;
}

在上面的例子中,foo()函数在Base类中被声明为虚函数(使用virtual关键字),因此在main()函数中,当basePtr指向Derived对象并调用foo()时,会调用Derived类的foo()函数,而不是Base类的foo()函数。

  1. inline

inline关键字建议编译器对函数进行内联替换。当函数被声明为内联函数时,编译器会尝试在调用该函数的地方直接插入该函数的代码,而不是生成调用该函数的代码。这可以减少函数调用的开销,提高程序的执行效率。然而,需要注意的是,编译器并不总是遵循inline的建议,它可能会根据函数的复杂性和大小来决定是否进行内联替换。

例如:

inline int max(int a, int b) {
    return (a > b) ? a : b;
}

int main() {
    int x = 5;
    int y = 10;
    int z = max(x, y);  // 这里可能会直接插入 max 函数的代码
    return 0;
}

在上面的例子中,max()函数被声明为内联函数。当在main()函数中调用max(x, y)时,编译器可能会直接在调用处插入max()函数的代码,而不是生成一个函数调用。