0
T型へのポインタの配列を作成し、数値演算を実行する派生テンプレートを作成しようとしているテンプレートクラス "ArrayTemp"があります。私は、各配列の要素を追加し、合計で新しい配列を返す+演算子を実装するのに問題があります。汎用継承とオーバーロードされた演算子+
マイテンプレートベースクラス:
#include <iostream>
using namespace std;
template <class T>
class ArrayTemp
{
private:
T* arr;
int arrSize;
static int DSize;
public:
ArrayTemp(): arrSize(DSize), arr(new T[DSize]) {}
ArrayTemp(const ArrayTemp<T>& at): arrSize(at.arrSize), arr(new T[at.arrSize])
{
for (int i = 0; i < at.arrSize; ++i)
arr[i] = at.arr[i];
}
~ArrayTemp()
{
delete [] arr;
}
ArrayTemp<T>& operator = (const ArrayTemp<T>& source)
{
if (this != &source)
{
for (int i = 0; i < arrSize; ++i)
setElement(source.getElement(i), i);
}
return *this;
}
int getarrSize() { return arrSize; }
T& getElement(const int index) { return arr[index]; }
void setElement(const T& x, int index) { arr[index] = x; }
};
マイ派生テンプレート:
#pragma once
#include "ArrayTemp.h"
template <class T>
class numbers: public ArrayTemp<T>
{
public:
numbers(): ArrayTemp<T>()
{
for (int i = 0; i < (getarrSize()); ++i)
setElement(0, i);
}
numbers(const numbers<T>& n): ArrayTemp<T>(const ArrayTemp<T>& x) {}
~numbers(){}
numbers<T> operator + (const numbers<T>& n) const
{
numbers<int> arraysum;
for (int i = 0; i < getarrSize(); ++i)
arraysum.setElement((n.getElement(i) + getElement(i)), i);
return arraysum;
}
};
template <class T> int ArrayTemp<T>::DSize = 5;
だから私は(メインでこのような何かを行うことができます):
オーバーロードされている方法numbers<int> n1;
numbers<int> n2;
numbers<int> n3;
n3 = n1 + n2;
演算子+は、私が上に示したものと同様の構造内で実装されるはずですか?私は数値オブジェクトを返すコピーコンストラクタで何かを試すべきですか?また、派生テンプレートには新しいデータメンバーがないため、ArrayTemp代入演算子を呼び出す代入演算子で十分です。
int getarrSize() const { return arrSize; }
T & getElement(int index) { return arr[index]; }
T const & getElement(int index) const { return arr[index]; }
A:すぐに答えはあなたがベーステンプレートであなたの関数のconstの-正しいバージョンを宣言する必要があるように思わ
cannot convert 'this' pointer from 'const numbers<T>' to 'ArrayTemp<T> &'
1> with
1> [
1> T=int
1> ]
1> Conversion loses qualifiers
while compiling class template member function 'numbers<T> numbers<T>::operator +(const numbers<T> &) const'
1> with
1> [
1> T=int
1> ]
発生している問題は何ですか?加算演算子にエラーがある場合は、戻り値の型を数字の代わりにと宣言している可能性があります。 –
wrren
この種のことは、すべての型Tに対して+演算子が定義されていることを意味します.2つの要素(n.getElement(i)+ getElement(i))を追加すると、T型の2つの要素に対して+演算子が使用されます。 intのシンプルなケースには最適ですが、カスタムタイプにはあまり適していない可能性があります。 – dolphy
@Rhuideanここに私が得ている現在のエラーです。私はオペレータを試して実装する方法をたくさん試してみたところ、最初にインクルードしなかったので、助けを求めるだけで何の試行とそれに対応するエラーが出るのかわからなかった:S – bqui56