У меня есть вопрос относительно раннего / позднего связывания во время переопределения наследования.
Итак, я перехожу основы OOP для C ++ и читаю, что если вы не объявляете функцию в базовом классе virtual, выне могу отменить это.Однако у меня есть следующий код, и похоже, что мой компилятор переопределяет его для меня в любом случае.
#include <iostream>
using namespace std;
class Book{
public:
string title;
int number;
Book(){
}
Book(string title){
cout << "book " << title << " created" << endl;
}
void setNumber(int num){
number = num + 7;
}
~Book(){
cout << "book " << title << " destroyed:";
}
};
class Magazine: public Book {
public:
void setNumber(int num){
number = num;
}
};
int main()
{
Magazine mag;
mag.setNumber(4);
cout << mag.title << endl;
cout << "the number you are looking for is: " << mag.number << endl;
}
вывод на моем компиляторе равен 4, но на основании того, что я прочитал, c ++ имеет раннее связывание, и еслифункция не объявлена виртуальной в базовом классе, ее нельзя переопределить, поэтому она должна вывести num + 7, как указано в базовом классе.Я просто получил неправильный ресурс?Или это может быть ошибка / аномалия в моем компиляторе?
Спасибо всем за помощь