Представьте, что у меня есть суперкласс A на C++, который имеет виртуальный метод. Если я хочу переопределить его в своем классе B и все еще держать его в виртуальном режиме, рекомендуется сохранить ключевое слово virtual в классе B, могу ли я его игнорировать, потому что я уже сказал, что метод виртуальный в суперклассе?Метод виртуального класса C++
Например, что является правильным способом сделать следующее.
Метод A:
class A{
public:
virtual void hello(){
std::cout << "Hello World!" << std::endl;
};
};
class B: public A{
public:
virtual void hello() override{
std::cout << "Hello Sun!" << std::endl;
};
};
class C: public B{
public:
virtual void hello() override{
std::cout << "Hello Moon!" << std::endl;
};
};
Или объявить функцию как виртуальная только на первом классе.
Метод B:
class A{
public:
virtual void hello(){
std::cout << "Hello World!" << std::endl;
};
};
class B: public A{
public:
void hello() override{
std::cout << "Hello Sun!" << std::endl;
};
};
class C: public B{
public:
void hello() override{
std::cout << "Hello Moon!" << std::endl;
};
};
Я хочу использовать поздно выжидать во всех ситуациях. Поэтому мне нужно, чтобы метод hello() был виртуальным в трех классах. Оба способа работали над CodeBlocks, но я не знаю, что является лучшим способом или даже если между ними есть разница.
Вам не нужно сохранять ключевое слово 'virtual'. Что не так с вашим кодом? –
@ πάνταῥεῖ Привет за ваш ответ. Мой код работает отлично, я просто не знал, что было лучшим способом его реализовать (A или B). Теперь я знаю, что мне не нужно сохранять виртуальное ключевое слово –