Функция f () в классе MapSquare работает правильно. Когда я добавляю другой класс MapTriple, он не работает. Функция f () в MapSquare должна найти квадрат элементов в векторе, а в MapTriple следует умножить 3 на все элементы.
MapGeneric - это базовый класс, который содержит функцию map (), которая является рекурсивной функцией для доступа к векторным элементам, а функция f () является чисто виртуальной функцией.
MapSquare и MapTriple - два производных класса, переопределяющих функцию f (), чтобы найти квадрат векторных элементов и умножить 3 на все векторные элементы.
MapSquare работает нормально ... но когда я добавляю MapTriple, происходит ошибка сегментации. Пожалуйста, помогите решить эту проблему.
#include<vector>
#include<iostream>
#include<cstdlib>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
class MapGeneric
{
public:
virtual int f(int){};
vector<int> map(vector<int>, int);
};
class MapSquare:public MapGeneric
{
public: int f(int);
};
class MapTriple:public MapGeneric
{
public: int f(int);
};
class MapAbsolute:public MapGeneric
{
public: int f(int);
};
vector<int> MapGeneric::map(vector<int> v, int index)
{
if(index>=1)
{
v[index]=f(v[index]);
return map(v,index-1);
}
return v;
}
int MapSquare::f(int x)
{
return x*x;
}
int MapTriple::f(int x)
{
return 3*x;
}
int MapAbsolute::f(int x)
{
return abs(x);
}
int main()
{
//mapping square
MapSquare ob;
vector<int> L,L1,L2;
for (int i = 1; i <= 5; i++)
L.push_back(i);
L1=ob.map(L,sizeof(L));
cout<<"Square = ";
for ( vector<int>::iterator i = L1.begin(); i != L1.end(); ++i)
cout << *i<<" ";
//mapping triple
MapTriple t;
L2=t.map(L,sizeof(L));
cout<<endl<<"Triple = ";
for(vector<int>::iterator i=L2.begin();i!=L2.end();++i)
cout<<*i<<" ";
return 0;
}