>  기사  >  백엔드 개발  >  C++ 함수 매개변수 전달 메소드와 클래스 상속의 관계

C++ 함수 매개변수 전달 메소드와 클래스 상속의 관계

PHPz
PHPz원래의
2024-04-12 11:06:02724검색

질문: C++ 함수 매개변수 전달 방법과 클래스 상속 사이에는 어떤 관계가 있나요? 답변: 하위 클래스가 상위 클래스 함수를 상속할 때 매개변수 전달 방법은 동일할 수도 있고 다를 수도 있습니다. 하위 클래스가 상위 클래스 함수를 재정의하지 않으면 상위 클래스의 매개변수 전달 방법을 상속합니다. 하위 클래스가 상위 클래스 함수를 재정의하는 경우 다른 매개변수 전달 방법을 사용하도록 선택할 수 있습니다. 하위 클래스가 상위 클래스 함수의 매개변수를 수정해야 하는 경우 상위 클래스 함수를 참조별 전달로 선언해야 합니다.

C++ 函数参数传递方式与类继承的关系

C++에서 함수 매개변수 전달 메서드와 클래스 상속 간의 관계

Introduction

C++에서 함수 매개변수를 전달하는 방법에는 값 전달과 참조 전달의 두 가지 방법이 있습니다. 상위 클래스 함수가 ​​하위 클래스에 의해 재정의되면 매개변수 전달 방법이 영향을 받을 수 있습니다. 이 글에서는 함수 매개변수 전달 메소드와 클래스 상속 사이의 관계를 탐구할 것입니다.

값으로 전달

값으로 전달은 함수가 호출될 때 매개변수의 복사본을 만들어 함수 내부의 매개변수를 수정해도 호출하는 함수의 실제 매개변수에 영향을 주지 않습니다.

void swap(int a, int b) {
  int temp = a;
  a = b;
  b = temp;
}

int main() {
  int x = 1, y = 2;
  swap(x, y); // x 和 y 的值不会改变
  return 0;
}

Pass by reference

Pass by reference는 함수 호출 시 매개변수 저장소의 주소를 직접 사용하므로 함수가 호출 함수의 실제 매개변수를 직접 수정할 수 있습니다.

void swap(int& a, int& b) {
  int temp = a;
  a = b;
  b = temp;
}

int main() {
  int x = 1, y = 2;
  swap(x, y); // x 和 y 的值被交换
  return 0;
}

클래스 상속 및 매개변수 전달

하위 클래스가 상위 클래스 함수를 상속하는 경우 하위 클래스 함수의 매개변수 전달 방법은 상위 클래스 함수와 같을 수도 있고 다를 수도 있습니다.

변경되지 않은 매개변수 전달 방법의 예

하위 클래스 함수가 ​​상위 클래스 함수를 재정의하지 않는 경우 하위 클래스 함수는 상위 클래스 함수의 매개변수 전달 방법을 상속합니다.

class Base {
public:
  void func(int a);
};

class Derived: public Base {
public:
  using Base::func; // 不覆盖 func,继承按值传递
};

매개변수 전달 방법 변경 예

하위 클래스 함수가 ​​상위 클래스 함수를 재정의하는 경우 하위 클래스 함수는 다른 매개 변수 전달 방법을 사용하도록 선택할 수 있습니다.

class Base {
public:
  void func(int a) {}
};

class Derived: public Base {
public:
  void func(int& a) {} // 覆盖 func,使用按引用传递
};

실용 사례

print() 함수가 있는 Shape 기본 클래스와 Shape를 상속하고 draw() 함수의 Circle 하위 클래스입니다. Shape::print()Shape 참조를 값으로 전달하는 경우 Circle::draw()는 상위 항목을 수정할 수 없습니다. 클래스의 >print(). print() 函数的 Shape 基类和一个继承 Shape 并具有 draw() 函数的 Circle 子类。如果 Shape::print() 按值传递一个 Shape 引用,则 Circle::draw() 将无法修改父类的 print()

class Shape {
public:
  virtual void print(const Shape& shape) {}
};

class Circle: public Shape {
public:
  void draw() {
    // 无法修改父类的 print()
    print(static_cast<Circle&>(*this));
  }
};

为了允许子类修改父类的 print(),需要将 print()

class Shape {
public:
  virtual void print(Shape& shape) {}
};

class Circle: public Shape {
public:
  void draw() {
    // 可以修改父类的 print()
    print(*this);
  }
};

하위 클래스가 상위 클래스의 print()를 수정할 수 있도록 하려면 print()를 참조 전달로 선언해야 합니다. 🎜아아아아

위 내용은 C++ 함수 매개변수 전달 메소드와 클래스 상속의 관계의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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