функция от массива элементов класса наследника О_о

программирование Linux C++ си указатель

даже не знаю как грамматно задать вопрос=)

есть функция работающая с массивом элементов класса
class TClass1{
public: int x;
};

int Sum (TClass * A, int N){
int S
for (int i=0;i<N;i++)
S+=A[i].x;
return S;}

//теперь я создаю наследника

class TClass2 : public TClass1{
public: int y;
};

и хочу вспользоваться функцие sum для массива из TClass2, понятно что теперь каждый элемент из наследника занимает на 2 байта больше памяти. как бы мне sum преспособить для любых наследников TClass1 не переписывая её для каждого?

Примечание:
*грамотно конечно же

Примечание:
круто. спасибо
Ответы:
Объявите в базовом классе виртуальный метод, в каждом наследнике реализуйте подходящий алгоритм суммирования, таким образом реализация функции int Sum (TClass*, int) будет сведена к минимуму - перебор элементов массива и вызов суммирующего метода: S+=A[i].sum();
Функция sum должна работать с любыми наследниками класса TClass1, в том числе и с вашим TClass2. Она прекрасно просуммирует все переменные x.
А вот если вы хотите суммировать какие-то други значения, переопределяемые в наследниках, то обьявите виртуальный метод который возвращает нужное значение.


14 лет назад

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

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

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