#include <iostream>
using namespace std;
class base
{
public:
virtual void function1(){
cout<<"base function1"<<endl;
}
virtual void function2()=0;
};
class base2
{
public:
virtual void function2()=0;
};
class derived : public base, base2
{
public:
void function2(){
cout<<"derived function"<<endl;
}
};
int main()
{
derived d;
d.function2();
d.function1();
}
ここでは、2つの基本クラスには、純粋仮想関数としてfunction2()が含まれています。派生クラスは、両方の基底クラスを継承します。 function2()は派生クラスで実装されています。このようなシナリオでコンパイラがあいまいさを解決する方法。入力は大歓迎です。ここで派生クラスでどのように曖昧さが解決されましたか?
を探していたあなたは '派生:: function2'と'ベース呼び出す推測:: function1'、メインには曖昧 –
ないが(ありません)私は心配していました。しかし、派生クラスfunction2を継承して実装していますが、両方の基本クラスが同じ関数名を持つため、コンパイラは実装を受け入れます。 –
すべてのクラスは独自の '仮想関数テーブル'を持っています。基底クラスが '純仮想関数 'を持つ場合、'派生クラス 'は'純仮想関数 'を実装する必要があります。すべての '仮想関数'( '純仮想関数'を含む)は 'derived class'の表に一度リストされます。 – sameerkn