가상 기본 클래스
이전에 배운 상속 과정에서 이런 상황을 생각해 보셨는지 궁금합니다. 다중 상속 관계에서 파생 클래스가 두 개의 부모 클래스로부터 상속을 받고, 이 두 부모 클래스가 우연히 기본 클래스에서 상속받은 경우 수업. 동일한 멤버의 복사본 두 개를 상속받을 수 있으므로 이는 문제가 될 수 있습니다!
이것은 소위 모호성 문제로 이어집니다.
먼저 이런 종류의 다중 상속을 보여주는 예를 들어보겠습니다! 곰곰히 생각해보니, 옛날 에는 부유한 집이 있었는데, 처음에는 남자 주인이 집의 열쇠를 맡아 두었는데, 나중에는 두 아들이 생겼습니다. 몇 년이 지나서 그들은 자라서 남자 주인이 늙었기 때문에 열쇠 두 개를 더 맞춰서 두 아들에게 각각 주고, 몇 년 후에 두 아들도 결혼했습니다. 그리고 각각 소년과 소녀가 가계를 이어받았습니다. 소위 말하는 사람들이 번영하고 나중에 성장하여 열쇠를 물려줄 때입니다. 고대에는 열쇠가 당연히 소년에게 전달되었으므로 당연히 열쇠는 손자에게 주어졌습니다. 이때 손자의 아버지와 삼촌(즉, 원주인의 두 아들)이 모두 손자에게 열쇠를 주어야 했기 때문에 열쇠는 두 개를 갖게 되었습니다. 어린 손자는 손에 든 열쇠 두 개를 보며 "하나면 충분해! 둘... 아깝지 않아?"라고 말했습니다.
이 이야기를 읽고 나면 누구나 상속을 이해하기가 더 쉬울 것입니다. 이야기의 원래 남자 주인공인 할아버지는 기본 클래스입니다. 그의 두 자녀는 두 개의 파생 클래스이고, 그 중 하나의 자녀는 어린 아이입니다. Sun Tzu는 두 파생 클래스에서 상속되기 때문에 마지막 파생 클래스입니다. 그리고 이 두 파생 클래스에는 공통 멤버(둘 다 동일한 기본 클래스인 할아버지를 상속하기 때문에 키)가 있습니다. Sun Tzu의 마지막 파생 클래스에는 두 개의 중복 멤버(키)가 있어 모호함의 원인이 됩니다!
아래에서는 이 예제를 따르고 구체적으로 코드를 작성합니다. 이를 참조할 수 있습니다.
/************************************//Des: C++ 튜토리얼 데모//저자: Huang/ /저작권:www.dotcpp.com//날짜:2017/12/18************************************ * *******/#include<iostream>usingnamespacestd;classGrandfather{public:intkey;public:};classFather1:publicGrandfather{};classFather2:publicGrandfather{};classGrandson:publicFather1,publicFather2{};intmain(){ 손자A ;//A.key=9;return0;}
코드는 지금 설명의 편의를 위해 정의된 4개의 클래스가 비어 있음을 나타냅니다. 즉, Grandson 클래스는 두 개의 아버지 클래스를 상속받으며 두 개의 핵심 멤버를 가지게 됩니다. 이때 이 키를 사용하려고 하면 main 함수에서 값을 할당하려고 할 때 공개 유형으로 선언되었음을 주의하세요. , "고유하지 않음, 모호함"이라는 오류 메시지가 표시됩니다. 즉 소위 모호성 문제가 발생하며 누구나 잘 이해할 수 있습니다.
그렇다면 이 문제를 피하는 방법은 무엇입니까? 이럴 때 가상 기본 클래스를 사용해야 합니다! 소위 가상 기본 클래스는 상속 시 공용 유형을 상속받기 전에 가상 으로 수정하는 것입니다. 예를 들어, 이 예에서는 아버지 클래스가 할아버지 클래스를 상속할 때 추가로 가상을 추가하기만 하면 됩니다. 클래스와 기본 클래스는 기본 클래스 개체의 복사본만 유지합니다. 여러 복사본과 모호성을 피하십시오.
정의 방법은 두 상위 클래스를 파생할 때 가상 선언을 추가하는 것입니다.
classFather1:virtualpublicGrandfatherclassFather2:virtualpublicGrandfather
나머지는 변경되지 않은 상태로 유지됩니다. 모호함의 생성과 가상 기본 클래스의 사용법을 이해하기 위해 자신의 컴퓨터에서 테스트할 수 있습니다.