>백엔드 개발 >C++ >C++ 인라인 함수와 가상 함수의 유사점과 차이점

C++ 인라인 함수와 가상 함수의 유사점과 차이점

王林
王林원래의
2024-04-17 09:39:01901검색

인라인 함수는 함수 본문을 호출 지점에 포함하여 성능과 코드 크기를 향상시키지만 가독성이 낮습니다. 가상 함수는 다형성을 통해 하위 클래스에 의해 재정의된 함수를 호출하여 유연성을 향상시키지만 런타임 오버헤드가 더 높습니다.

C++ 内联函数与虚拟函数的异同

C++에서 인라인 함수와 가상 함수의 유사점과 차이점

인라인 함수

인라인 함수는 호출할 때 함수 호출을 실행하는 대신 컴파일러가 호출 지점에 함수 본문을 삽입하는 함수입니다. 프로세스.

이점:

  • 성능 향상: 오버헤드 호출을 방지합니다.
  • 코드 크기 줄이기: 함수 본문은 여러 호출 지점에서 반복적으로 나타나지 않습니다.

단점:

  • 컴파일 시간 증가: 각 호출 지점에 대해 함수 본문을 컴파일해야 합니다.
  • 코드 가독성 감소: 함수 본문이 코드 베이스 전체에 분산되어 있습니다.

구문: ​​

inline int sum(int a, int b) {
  return a + b;
}

가상 함수

가상 함수는 상속 메커니즘을 통해 다형성을 달성하는 함수입니다. 상위 클래스 객체의 가상 함수가 호출되면 호출되는 실제 함수는 객체의 동적 유형에 따라 결정됩니다.

이점:

  • 다형성 달성: 하위 클래스는 상위 클래스의 가상 함수를 재정의할 수 있습니다.
  • 코드 확장성과 유연성을 향상시킵니다.

단점:

  • 런타임 오버헤드: 가상 함수 테이블과 간접 호출을 유지해야 합니다.
  • 코드 복잡성 증가: virtualoverride 키워드를 사용해야 합니다.

문법:

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

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

유사점과 차이점 비교:

ㅋㅋㅋ 다형성지원되지 않음 지원 실제 사례:
inline int sum(int a, int b) {
  return a + b;
}

int main() {
  std::cout << sum(1, 2) << std::endl;  // 输出:3
}
가상 함수를 사용하여 그래픽 그리기 인터페이스를 구현할 수 있습니다.
class Shape {
 public:
  virtual void draw() = 0;
};

class Circle : public Shape {
 public:
  virtual void draw() override {
    std::cout << "Drawing a circle" << std::endl;
  }
};

int main() {
  Shape* shape = new Circle();
  shape->draw(); // 输出:Drawing a circle
}
Features 인라인 함수 가상 함수
호출 메커니즘 함수 본문 삽입 간접 호출
인라인 함수를 사용하여 합계와 같은 간단한 수학 연산을 구현할 수 있습니다.

위 내용은 C++ 인라인 함수와 가상 함수의 유사점과 차이점의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.