>백엔드 개발 >C++ >C++에서 다형성 탐구

C++에서 다형성 탐구

WBOY
WBOY원래의
2023-08-21 22:21:231381검색

C++는 객체지향 프로그래밍을 지원하는 언어로, 객체지향 프로그래밍의 주요 특징은 다형성입니다. 다형성은 동일한 작업을 수행할 때 서로 다른 객체가 생성하는 서로 다른 동작을 나타냅니다. C++에서는 함수 오버로딩과 가상 함수의 사용을 통해 다형성이 달성됩니다. 다음에서는 독자가 이 개념을 더 잘 이해할 수 있도록 C++의 다형성을 살펴보겠습니다.

1. 함수 오버로드

함수 오버로드는 동일한 이름을 가진 여러 함수가 동일한 범위에 정의되어 있지만 해당 매개변수 유형, 매개변수 수 또는 반환 값 유형이 다르다는 것을 의미합니다. 이러한 방식으로 함수가 호출되면 컴파일러는 전달된 매개변수에 따라 해당 함수를 호출하도록 자동으로 선택합니다. 예:

void print(int a){
    cout<<"int: "<<a<<endl;
}

void print(double b){
    cout<<"double: "<<b<<endl;
}

int main(){
    print(10); //调用print(int a)函数
    print(3.14); //调用print(double b)函数
    return 0;
}

print 함수는 각각 int 유형 및 double 유형 매개변수에 대해 오버로드되고 정의됩니다. 주 함수에서 인쇄 함수가 호출되면 컴파일러는 전달된 매개변수 유형에 따라 호출할 해당 함수를 선택합니다. 이는 함수 오버로딩을 통해 달성된 다형성의 예입니다.

2. 가상 함수

가상 함수는 상위 클래스에 정의된 함수이며 하위 클래스에서 이를 재정의할 수 있습니다. 하위 클래스가 함수를 상속하는 경우 함수 이름과 매개변수도 정확히 동일해야 합니다. 런타임 시 가상 함수는 실제 실행 객체 유형에 따라 동적으로 바인딩되어 다형성을 달성합니다. 예:

class Shape{
public:
    virtual void area(){ //定义虚函数area
        cout<<"This is a shape"<<endl;
    }
};

class Circle:public Shape{
public:
    void area(){//重写虚函数area
        cout<<"This is a circle"<<endl;
    }
};

class Rectangle:public Shape{
public:
    void area(){//重写虚函数area
        cout<<"This is a rectangle"<<endl;
    }
};

int main(){
    Shape *shape;
    Circle circle;
    Rectangle rectangle;
    shape = &circle;
    shape->area();//调用circle类中的虚函数area
    shape = &rectangle;
    shape->area();//调用rectangle类中的虚函数area
    return 0;
}

위 코드에서는 가상 기능 영역을 포함하는 Shape 클래스가 정의됩니다. Circle 및 Rectangle 클래스는 Shape 클래스를 상속하고 그 안에 가상 기능 영역을 다시 작성합니다. Main 함수에서는 Shape 유형에 대한 포인터가 정의되고 Circle 객체와 Rectangle 객체의 주소에 할당되며 면적 함수가 각각 호출됩니다. 면적 함수는 가상 함수이고 실제 실행 객체 유형에 따라 동적으로 바인딩되므로 출력 결과는 각각 "이것은 원입니다."와 "이것은 직사각형입니다."입니다. 다형성을 구현한 가상 함수의 예입니다.

3. 순수 가상 함수

순수 가상 함수는 가상 함수의 함수 본문이 비어 있고 하위 클래스가 클래스를 상속하려면 함수를 다시 작성해야 함을 의미합니다. 기본 클래스에 순수 가상 함수가 있는 경우 해당 클래스를 추상 클래스라고 합니다. 예:

class Shape{
public:
    virtual void area() = 0;//定义纯虚函数area
};

class Circle:public Shape{
public:
    void area(){
        cout<<"This is a circle"<<endl;
    }
};

class Rectangle:public Shape{
public:
    void area(){
        cout<<"This is a rectangle"<<endl;
    }
};

int main(){
    Shape *shape;
    Circle circle;
    Rectangle rectangle;
    shape = &circle;
    shape->area();//调用circle类中的虚函数area
    shape = &rectangle;
    shape->area();//调用rectangle类中的虚函数area
    return 0;
}

위 코드에서 순수 가상 기능 영역은 Shape 클래스에 정의되어 있습니다. Circle 및 Rectangle 클래스는 Shape 클래스를 상속하기 위해 이 함수를 상속해야 합니다. 그렇지 않으면 컴파일 오류가 보고됩니다. 주 함수에서 다형성은 Circle 및 Rectangle 객체에 대한 포인터를 가리켜 달성됩니다.

요약:

C++에서 다형성을 구현하는 방법은 여러 가지가 있으며 그 중 함수 오버로딩과 가상 함수가 가장 일반적으로 사용되는 두 가지 방법입니다. 다형성을 구현하면 코드의 유연성과 재사용성이 크게 향상될 수 있으며, 코드를 읽고 유지 관리하기도 더 쉬워집니다. 실제 프로그래밍에서는 다형성의 본질과 용도를 이해하고, 다형성을 활용하는 방법과 기술을 익히는 데 중점을 두어 프로그래밍 능력을 강화해야 합니다.

위 내용은 C++에서 다형성 탐구의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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