struct rowDisplayPolicy
{
static std::string seperator() { return ", "; }
};
struct columnDisplayPolicy
{
static std::string seperator() { return "\n "; }
};
template <typename T, int Size, typename DisplayPolicy>
class Array {
public:
Array() : pArray(new T[Size]) {}
Array(T* pT) : pArray(new T[Size])
{
for(int i=0; i<Size; ++i)
*(pArray + i) = *(pT + i);
}
~Array() { delete [] pArray; }
T& operator[](int n)
{
if(n<0 || Size<=n) throw std::Exception("index out of range");
return *(pArray+n);
}
T operator[](int n) const
{
if(n<0 || Size<=n) throw std::Exception("index out of range");
return *(pArray+n);
}
void display() const
{
std::cout << "\n ";
for(int i=0; i<Size-1; ++i)
std::cout << *(pArray+i) << DisplayPolicy::seperator();
std::cout << *(pArray+Size-1) << "\n";
}
private:
Array(const Array<T,Size,DisplayPolicy>&); // make public impl. Later
Array<T,Size,DisplayPolicy>& operator=(const Array<T,Size,DisplayPolicy>&); // ditto
T* pArray;
};
私は質問があります、なぜ演算子[]は2つの異なる方法をオーバーロードします。そしてそれらの違いは何ですか?私は 'function()const'の意味を明確にしていません。いくつかの例を教えてください。演算子[]のオーバーロードはどのように機能しますか?
なぜ、2番目のものはconst参照ではなくコピーを返しますか?そしてconstについては、それは簡単にGoogleが可能です。 – Corbin