Mai multe clase de bază

Luați în considerare exemplul anterior. Deoarece numele este un membru al ambelor clase A și B. compilatorul nu poate determina care o variabilă este o funcție să fie numit. Accesul la un membru este ambiguu dacă se poate referi la un număr de funcții, obiecte, tipuri sau enumerările.

Compilatorul determină ambiguitatea prin efectuarea de teste în ordinea indicată.

În cazul în care accesul la numele este ambiguu (așa cum este descris mai sus), un mesaj de eroare este.

Dacă supraîncărcat funcții ambigue, acestea vor fi soluționate. (Pentru mai multe informații despre funcția de ambiguitate supraîncărcare cm. În secțiunea argument de comparare.)

În cazul în care accesul la numele încalcă permisiunea de acces la membrii, un mesaj de eroare este. (Pentru mai multe informații, consultați. Cum de a gestiona accesul membrilor.)

În cazul în care expresia conduce la ambiguitate ca urmare a moștenirii, ea poate fi rezolvată manual, prin specificarea numele clasei în locul numelui. Pentru a compila exemplul anterior, fără ambiguitate, puteți folosi următorul cod.

În cazul în care pot să apară erori de C. declarate în cazul în care trimiterea la domeniul B la C. Cu toate acestea, eroarea nu este emisă, în cazul în care nu face referire la B fără rezerve în C.

dominație

câteva nume pe care le puteți obține prin moștenire grafic (obiect funcție sau enumeratorul). Cu clase de bază nonvirtual astfel de cazuri ambigue. De asemenea, au amestecat cu clase de bază virtuale, în cazul în care nu domina cealaltă a numelor.

Sau că numele domină celălalt, în cazul în care este definit în ambele clase și o clasă este derivată dintr-un alt. Un nume dominant - este numele clasei derivate; Se utilizează atunci când ar apărea altfel ambiguitate, așa cum se arată în exemplul următor.

conversie ambiguă

indicii explicite și implicite de conversie și referințe la tipuri de clasă poate duce la ambiguitate. Figura următoare „pointerii turnate la ambigui clase de bază“, arată următoarele:

Mai multe clase de bază

indicii turnate la clasele de bază ambigui

Conversia de tip A * (un pointer la A) este ambiguu, deoarece nu există nici o modalitate de a determina ce Un tip sub-obiect este corectă. Vă rugăm să rețineți că ambiguitate poate fi evitată prin specificarea sub-obiect utilizat, așa cum se arată mai jos: