Welcome

首页 / 软件开发 / C++ / C++中的名字查找问题解答

C++中的名字查找问题解答2011-05-31朋友最近发邮件问我两个问题。内容如下(为了更适合阅读,我做了简单修改。译者在此基础上又做了修改):

我在C++的多继承上遇到了很大麻烦。

如图1,A、B1和B2为纯抽象类;C从B1、B2多继承,且实现了全部父类的抽象方法。

图1

现在:

C* p = new C;
p->Method_of_A(); //从B1、B2都能得到被调用方法,为什么编译器不报“二义性”(ambiguity)错误呢?

而按图2结构实现继承关系后:

图2

B4* p = new C;
p->Method_of_A();

编译器(VC++)认为有二义性。经调试我发现编译过程中使用了“adjustor thunk”(译者注:具体请参看http://blog.sina.com.cn/u/491874bb010004xq或Stan Lippman的《Inside the C++ Object Model》)。希望您能解答这两个问题,以帮助我更好理解C++(更确切的说是VC++)中的MI(多继承)机制。