Допустим, у меня есть этот простой кодНеоднозначность множественного наследования
#include <iostream>
using namespace std;
class A {
public:
void show() {
cout << "A" << endl;
}
};
class B {
public:
void show() {
cout << "B" << endl;
}
};
class C:public A, public B {
};
int main()
{
C obj;
obj.show();
}
это бросает компиляции ошибки времени, потому что вызов функции шоу() является неоднозначным. Я хочу знать, как компилятор это понимает? Создание объекта - это процесс времени выполнения, поэтому, как компилятор знает перед собой, что объект класса C будет создан, который будет вызывать show(). Может ли кто-нибудь сказать мне концепцию, лежащую в основе этого?
Он не должен знать ничего о том, как вы используете класс заранее. Он видит, что вы вызываете 'show()' и не можете выбрать один из двух. – chris
Как он узнает, что объект класса C вызывает show(), если объект еще не создан – alchemist95
Компилятор - это то, что генерирует код для создания объекта. Это действительно то же самое, что объявить строку и сообщить компилятору, что она имеет функцию 'length', но не' foo'. Вы сказали компилятору, что 'obj' является' C'. Вот почему он знает, что это «С». – chris