条件1 ) b继承a,c继承bclassa (公共: void PP ) ) { cout 'A' endl; }; classb : publica { public : void PP () } { cout ' b ' endl; }; class c : publicb { public : void PP () } { cout ' c ' endl; }; 条件2:voidPP(b*b ) voidPP ) a*a )问题) PP ) newc )属于哪个重载函数coding:classa ) public3360voidPP ) { cout 'A' endl ; classb : publica { public : void PP () } { cout ' b ' endl; }; class c : publicb { public : void PP () } { cout ' c ' endl; }; class d : publica { public : void PP () } { cout ' d ' endl; }; voidPP(B*B ) ) {b-pp; 计数' bpp ' endl; }voidPP(a*a ) ) {a-pp; cout 'APP' endl; (}int main ) ) PP ) newc; 返回0; (输出结果) CBPP单线继承较多(class D : public B,publica ) public:virtualvoidPP ) ) { cout 'D' endl; }; int main () PP (newd ); 返回0; (输出) DBPP多继承下) classa ) public:virtualvoidPP ) { cout 'A' endl; }; classaa { public : virtualvoidpp (} { cout ' aa ' endl; }; class D : public A,publicaa { public : virtualvoidpp () } { cout ' d ' endl; }; voidPP(a*a ) ) {a-pp; cout 'APP' endl; }voidPP(a*a ) ) {a-pp; cout 'APP' endl; (}int main ) ) PP ) newd ); 返回0; 结果:编译错误:对pp重载函数的调用未知
结论:
重载派生,就近原则。 如果无法确定,则会编译错误