Jetez un oeil sur le code suivant vous n'êtes pas obligé de lire le code entier suffit de lire le code du constructeur de copie et le programme principal.
la déclaration suivante dans le constructeur de copieproblème de copie superficielle!
//the statement below should do the shallow copy
ptr[currentsize++]=object.ptr[i];
cette déclaration devrait faire une copie superficielle en cas de tableau de pointeurs alors s'il vous plaît voir le code du constructeur de copie et la fonction principale je l'ai mentionné problêmes dans le code .
#include<iostream.h>
template<typename t>
class vector
{
public:
vector(int size);
vector(const vector<t>&);
void insert(t);
void display()const;
void makeEmpty();//sets all pointers to NULL
private:
t* ptr;
int size;
int currentsize;
};
template<typename t>
vector<t>::vector<t>(int s)
{
currentsize=0;
size=s;
ptr=new t[size];
}
//copy constructor
template<typename t>
vector<t>::vector<t>(const vector<t>& object)
{
size=object.size;
ptr=new t[size];
currentsize=0;
for(int i=0;i<object.currentsize;i++)
{
//the statement below should do the shallow copy
ptr[currentsize++]=object.ptr[i];
}
}
template<class t>
void vector<t>::insert(t element)
{
if(currentsize < size)
ptr[currentsize++]=element;
}
template<class t>
void vector<t>::display()const
{
for(int i=0;i<currentsize; i++)
{
cout<<ptr[i]<<endl;
}
}
template<class t>
void vector<t>::makeEmpty()
{
for(int i=0;i<currentsize;i++)
ptr[i]=NULL;
}
main()
{
vector<char*>object(10);
char *array[]={"zia","arshad","muneeb"};
object.insert(array[0]);
object.insert(array[1]);
object.insert(array[2]);
vector<char*> object1=object;
cout<<"displaying the new object"<<endl;
object1.display();
object.makeEmpty();//sets all pointers to NULL
//now here the object 1 should be changed but its not
cout<<"again displaying object1"<<endl;
object1.display();//still displaying the three names
cout<<endl;
system("pause");
}
okay; et quel est le problème? – Vlad
s'il vous plaît indenter votre code c'est difficile à lire! –