c++ как изменить функцию класса из объекта

программирование C++

вообщем хочу сделать так:
class adding{
int a;
void set(int a){
this->a=a;
}
void add(int a){
this->a+=a;
this->onAdd();
}
void onAdd(){}
}

main(){
adding smth;
smth.onAdd(){//вот здесь ругается, мол нельзя переопределить.
std::cout>>"Numbers have just added!">>std::endl;
}
smth.set(10);
smth.add(5); // здесь поидее должно вылететь в консольке Numbers have just added!
}
Ответы:
Изменить функцию класса можно только если класс сам на такое согласен.
Изменить функцию произвольного класса получится только в том случае, если этот класс унаследовать (т.е. если класс не финализирован и метод не финализирован).
Метод класса нельзя изменить. Термина "изменить" нет в спецификации С++. Метод класса может быть изменен, только если соблюдаются следующие условия:
- Класс должен быть абстрактным (то есть содержать виртуальные методы, то есть иметь перед определением ключевое слово virtual)
- Абстрактный метод не может быть определен в абстрактном классе (класс является абстрактным, пока он содержит хотя бы один абстрактный метод.)
- Метод должен быть определен в классе-наследнике. Экземпляры абстрактных классов создавать нельзя. То есть, в теле функции main переопределять его нельзя. Необходимо создать класс-наследник, в котором он будет переопределен.


11 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.