C++11의 새로운 기능 - 다형성 및 가상 함수, 재정의 지정자
다형성과 가상 함수
다형성은 C++의 중요한 기능 중 하나이자, 초보자가 이해하기 어려운 기능이기도 합니다. 먼저 간단한 예를 살펴보겠습니다.
코드는 매우 간단합니다. 작성자의 말에 따르면 위 코드에서 다형성의 기능에 대한 핵심 사항을 설명하면 안 됩니다. 더 간단하게, 주 함수부터 시작합니다:
-
기본 클래스에 대한 포인터
- 파생 클래스의 객체를 가리킵니다.
- 파생 클래스는 기본 클래스에 정의된 가상 함수를 포괄합니다.
이 세 가지 사항은 필수 조건이며 하나는 필수입니다.
위 코드에는 다른 흥미로운 내용이 있습니다. 결과에 영향을 미치지는 않지만 그래도 이해하는 것이 좋습니다. 파생 클래스에서 기본 클래스의 가상 함수를 재정의(오버라이딩)하는 경우:
-
virtual 키워드가 필요하지 않습니다
- 함수를 공개로 선언할 필요는 없습니다
실패 덮기
가상 함수를 덮어쓰려면 두 함수의 서명이 일관되어야 합니다. 예를 들어, 다음 코드는
sub2::f1의 서명이 base::f1의 서명과 일치하지 않으므로 다형성을 달성할 수 없습니다.
어쩌면 이 오류가 너무 명백하고 절대 발생하지 않을 것이라고 생각할 수도 있습니다. 이는 이 예제의 멤버 함수가 너무 단순하기 때문입니다. 실제 개발에서는 개발 규모가 확장됨에 따라 클래스의 상속 관계가 점점 더 깊어지고 멤버 함수의 매개 변수도 점점 더 많아질 것입니다. 파생 클래스에 정의된 멤버 함수의 서명 및 재정의를 자주 접하게 됩니다. 개체의 서명이 일치하지 않아 덮어쓰기가 실패합니다.
그리고 끔찍한 점은 이러한 종류의 오류는 컴파일 오류를 생성하지 않으며 찾기가 쉽지 않다는 것입니다.
override 지정자
이 문제를 해결하기 위해 C++11에 메서드가 도입되었습니다. 파생 클래스에서 재정의 함수를 선언하고 정의할 때 재정의 지정자를 사용하세요.
명시적인 함수 의도로 인해 이므로 컴파일러가 기본 클래스에서 동일한 시그니처를 가진 가상 함수를 찾을 수 없으면 컴파일 오류가 발생합니다.
저자는
언어 자체의 기능을 더 잘 활용하고 오류를 자동으로 감지할 수 있는 기회를 포기하지 않는 것이 C++ 프로그래머의 습관이 되어야 한다고 생각합니다. 장인 정신의 구현이라고도 볼 수 있습니다.
관련 기사:
C++11의 새로운 기능에서 auto와 decltype의 차이점과 연결
관련 동영상:
위 내용은 C++11의 새로운 기능 - 다형성 및 가상 함수, 재정의 지정자의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

C#.NETISVERSATILEFORBOTHWEBBANDDESKTOPDEVENTROMMENT.1) FORWEB, useASP.NETFORRICHINTERFACES.3) FORDESKTOP.3) USEXAMARINFORCROSS-PLATFORMDEEVENTRIMMENT, LINABILEDEV, MACODEDEV, and MACODEDOWS, 및 MACODEDOWS.

C#.NET은 여러 응용 프로그램 개발을 지원하는 강력한 도구 및 라이브러리를 제공하기 때문에 여전히 중요합니다. 1) C#은 .NET 프레임 워크를 결합하여 개발 효율적이고 편리하게 만듭니다. 2) C#의 타입 안전 및 쓰레기 수집 메커니즘은 장점을 향상시킵니다. 3) .NET은 크로스 플랫폼 실행 환경과 풍부한 API를 제공하여 개발 유연성을 향상시킵니다.

C#은 엔터프라이즈 레벨 애플리케이션, 게임 개발, 모바일 응용 프로그램 및 웹 개발에서 널리 사용됩니다. 1) 엔터프라이즈 레벨 애플리케이션에서 C#은 종종 asp.netcore가 webapi를 개발하는 데 사용됩니다. 2) 게임 개발에서 C#은 Unity 엔진과 결합되어 역할 제어 및 기타 기능을 실현합니다. 3) C#은 코드 유연성 및 응용 프로그램 성능을 향상시키기 위해 다형성 및 비동기 프로그래밍을 지원합니다.

C# .NET 앱을 Azure 또는 AWS에 배포하는 방법은 무엇입니까? 답은 Azureappservice와 Awelasticbeanstalk를 사용하는 것입니다. 1. Azure에서 Azureappservice 및 AzurePipelines를 사용하여 배포를 자동화하십시오. 2. AWS에서 Amazon Elasticbeanstalk 및 Awslambda를 사용하여 배포 및 서버리스 컴퓨팅을 구현하십시오.

C# 및 .NET 런타임은 개발자가 효율적이고 강력하며 크로스 플랫폼 개발 기능을 강화하기 위해 긴밀히 협력합니다. 1) C#은 .NET 프레임 워크와 완벽하게 통합하도록 설계된 유형 안전 및 객체 지향 프로그래밍 언어입니다. 2) .NET 런타임은 C# 코드 실행을 관리하고, 쓰레기 수집, 유형 안전 및 기타 서비스를 제공하며, 효율적이고 크로스 플랫폼 운영을 보장합니다.

.NET을 사용하여 응용 프로그램을 구축하는 방법? .NET을 사용하여 응용 프로그램 빌드 응용 프로그램은 다음 단계를 통해 달성 할 수 있습니다. 1) C# 언어 및 크로스 플랫폼 개발 지원을 포함한 .NET의 기본 사항을 이해합니다. 2) .NET 생태계의 구성 요소 및 작동 원리와 같은 핵심 개념을 배우십시오. 3) 간단한 콘솔 애플리케이션에서 복잡한 WebApis 및 데이터베이스 운영에 이르기까지 기본 및 고급 사용을 마스터합니다. 4) 구성 및 데이터베이스 연결 문제와 같은 일반적인 오류 및 디버깅 기술에 익숙해야합니다. 5) 응용 프로그램 성능 최적화 및 비동기 프로그래밍 및 캐싱과 같은 모범 사례.

.NETFramework는 소프트웨어 프레임 워크이며 C#은 프로그래밍 언어입니다. 1..netframework는 데스크탑, 웹 및 모바일 애플리케이션 개발을 지원하는 라이브러리 및 서비스를 제공합니다. 2.C#은 .NETFramework 용으로 설계되었으며 최신 프로그래밍 기능을 지원합니다. 3..NetFramework는 CLR을 통해 코드 실행을 관리하고 C# 코드는 IL로 컴파일되어 CLR에 의해 실행됩니다. 4. .NETFramework를 사용하여 응용 프로그램을 신속하게 개발하면 C#은 LINQ와 같은 고급 기능을 제공합니다. 5. 일반적인 오류에는 유형 변환 및 비동기 프로그래밍 교착 상태가 포함됩니다. 디버깅을 위해서는 VisualStudio 도구가 필요합니다.

C# .NET 개발을 시작하려면 다음과 같은 것이 필요합니다. 1. C#의 기본 지식과 .NET 프레임 워크의 핵심 개념을 이해하십시오. 2. 변수, 데이터 유형, 제어 구조, 기능 및 클래스의 기본 개념을 마스터하십시오. 3. LINQ 및 비동기 프로그래밍과 같은 C#의 고급 기능을 배우십시오. 4. 일반적인 오류에 대한 디버깅 기술 및 성능 최적화 방법에 익숙해 지십시오. 이러한 단계를 통해 C#.NET의 세계를 점차적으로 침투하고 효율적인 응용 프로그램을 작성할 수 있습니다.
