С++ вопросы : Вопрос 1 : 68

Создать контейнер, в который можно добавлять и удалять методы. Размер контейнера должен увеличиваться автоматически.

 

Уважаемые учащиеся ниже Вы сможете увидеть ответ, перед тем, как ответить, пожалуйста, постарайтесь написать для себя ответ на черновике, и только потом сравните наш ответ с Вашим: 

 

 

 

 

 

Верно ли наше решение?

Ответ:

#include "stdafx.h" 
#include  
#include  
#include  
 
using namespace std; 
 
typedef int (*Func)(void *,int); 
 
// Описание класса контейнера методов 
class FuncContainer 
{ 
private: 
    Func *Funcs;        // Массив указателей на методы 
    int funcs_count;        // Количество методов 
 
public: 
    FuncContainer()         
    { 
        funcs_count = 0;         
        Funcs = (Func*) malloc(0 * sizeof(Func));     
    } 
 
    void AddMethod(void *func) 
    { 
        funcs_count++;     
        Funcs = (Func*) realloc(Funcs, funcs_count*sizeof(Func));             
        Funcs[funcs_count - 1] = (Func) func;     
    } 
    void DeleteMethod(int idx) 
    { 
        for(int i = idx; i < funcs_ount - 1; i++) 
        { 
            Funcs[i] = Funcs[i + 1];                 
        } 
        funcs_count--; 
        Funcs = (Func*) realloc(Funcs, funcs_count * sizeof(Func));         
    } 
 
    int InvokeMethod(int n, void *args, int args_count) 
    { 
        int i = 0;             
 
        i = (*Funcs[n])(args, args_count);     
        return i;             
    } 
 
    int GetFunctionsCount(void) 
    { 
        return funcs_count; 
    } 
}; 
 
int AvgFunc(void *args, int args_count) 
{ 
    int res = 0;             
    for(int i = 0; i < args_count; i++) 
    { 
        res += ((int*)args)[i];     
    } 
    res = res/args_count;         
 
    return res;                 
} 
 
int SumFunc(void *args, int args_count) 
{ 
    int res = 0;             
    for(int i=0; i < args_count; i++) 
    { 
        res += ((int*)args)[i];    // Считаем сумму аргументов 
    } 
 
    return res;                } 
 
// Главная функция программы 
int _tmain(int argc, _TCHAR* argv[]) 
{ 
    FuncContainer    container;    // Объект класса контейнера 
    int    values[]={ 1, 2, 3, 4, 5, 3 };    // Массив аргументов для методов 
 
    container.AddMethod(AvgFunc);            // Добавляем метод в контейнер 
    container.AddMethod(SumFunc);            // Добавляем метод в контейнер 
 
                // Выводим на экран массив аргументов 
    cout << "Arguments array is: { 1, 2, 3, 4, 5, 3}" << endl << endl; 
                // Выводим на экран результат вызова первого метода 
    cout << "Average value is: " << container.InvokeMethod(0,values,6) << endl; 
                // Выводим на экран результат вызова второго метода 
    cout << "Sum is: " << container.InvokeMethod(1,values,6) << endl; 
 
    cout << endl << "Press any key to quit..."; 
    getch();        // Ожидаем нажатия клавиши для выхода из программы 
 
    return 0; 
} 
1 балл


© Copyright © 2017 - 2019 Все права защищены. Бесплатное онлайн образование.
  • https://disdik.munabarat.go.id/nusantara/slot/
  • https://dispendik.sidoarjokab.go.id/nuansa/gacor/
  • https://dkpd.grobogan.go.id/jakarta/gacor/
  • https://sbobet88.blog.unsia.ac.id
  • https://pafinusantara.blog.unsia.ac.id/bet88
  • https://idn-poker.blog.unsia.ac.id
  • https://slot777-gacor.blog.unsia.ac.id
  • https://agen-188bet.blog.unsia.ac.id
  • https://situs-slot.blog.unsia.ac.id
  • https://bet88-slot.blog.unsia.ac.id
  • https://2021.kinerja.ekon.go.id/up/slot777
  • https://2021.kinerja.ekon.go.id/halal/bet88
  • https://program-gacor.blog.unsia.ac.id
  • surapati.ac.id
  • untagsby.ac.id
  • kingandiboston.com
  • janeashton.com
  • redbrickcafechester.com
  • villanosdeljazz.com
  • slot