में वर्चुअल विनाशक को कार्यान्वित करना मैं सी ++ सीखना शुरू कर रहा हूं लेकिन मैं विनाशक में फंस गया हूं। हमें एक वेक्टर को लागू करने की जरूरत है और यही वह है जो मैंने अभी तक किया है।सी ++
#include<string.h>
#include<cassert>
#include<iostream>
using namespace std;
template<class T>
class Vector {
template<class U> friend ostream& operator<<(ostream&, const Vector<U>&);
private:
T* data;
unsigned len;
unsigned capacity;
public:
Vector(unsigned = 10);
Vector(const Vector<T>&);
virtual ~Vector(void);
Vector<T>& operator =(const Vector<T>&);
bool operator==(const Vector<T>&);
T& operator[](unsigned);
};
//PROBLEM!
template <class T>
~ Vector() {
delete data;
}
template<class T>
Vector<T>::Vector(unsigned int _capacity)
{
capacity = _capacity;
len = _capacity;
data = new T[_capacity];
}
template<class T>
Vector<T>::Vector(const Vector<T> & v)
{
len = v.len;
capacity = v.capacity;
data = new T[len];
for (unsigned int i = 0; i < len; i++)
data[i] = v.data[i];
}
template<class T>
Vector<T> & Vector<T>::operator = (const Vector<T> & v)
{
delete[ ] data;
len = v.len;
capacity = v.capacity;
data = new T [len];
for (unsigned int i = 0; i < len; i++)
data[i] = v.data[i];
return *this;
}
template<class T>
bool Vector<T>::operator == (const Vector<T> & v)
{
bool check = true;
check &= (len == v.len);
if (!check) return false;
check &= (capacity == v.capacity);
if (!check) return false;
for (unsigned int i = 0; i < len; i++) {
check &= (data[i] == v.data[i]);
if (!check) return false;
}
return true;
}
template<class T>
T& Vector<T>::operator[](unsigned int index)
{
return data[index];
}
इंटरफ़ेस दिया गया है और मुझे इसे लागू करने की आवश्यकता है। लेकिन यह सी और जावा से बहुत अलग है, कि मैं थोड़ा खो गया हूँ।
दूसरा व्यायाम हम व्युत्पन्न वर्ग के रूप में इस क) पिछले वेक्टर कार्यान्वयन का उपयोग और ख) वेक्टर रचना वर्ग के रूप में है, तो शायद हम आभासी नाशक तरीकों में से एक में इस्तेमाल करेगा की तरह कुछ लागू करने की आवश्यकता में ?
void testAssociativeArray() {
AssociativeArray<String, int> table;
table["abc"] = 15;
table["jkl"] = 12;
table["xyz"] = 85;
assert(table["jkl"], 12);
}
template<class P, class Q>
class Pair {
P p;
Q q; public:
Pair(const P& _p = P(), const Q& _q = Q()): p(_p), q(_q) {}
P& objectP() {return p;}
Q& objectQ() {return q;}
};
बस एक ध्यान दें: आप तर्क मान द्वारा में पारित कर दिया हो रही है और "कॉपी-और-स्वैप" मुहावरा (http://stackoverflow.com/questions/3279543/ का उपयोग करके अपने 'ऑपरेटर =' सुधार कर सकते हैं क्या है-कॉपी-एंड-स्वैप-मुहावरे) –