c++,なぜ不定値の値が来るの知りたい
int main関数の部の例外処理のここですと書いてある部分なのですが、thisを返してもなぜ不定値?(初期化してない?) コンソール画面で[添え字範囲エラー52570]
と謎の数値が出てします。
なぜなのでしょうか?、コメント部のしてあるソースの部分も同じの謎の数値が出てしまいます。
Array.h
// 配列クラステンプレートArray
#ifndef ___ClassTemplate_Array
#define ___ClassTemplate_Array
//===== 配列クラステンプレート =====//
template <class Type> class Array {
int nelem; // 配列の要素数
Type* vec; // 先頭要素へのポインタ
//--- 添字の妥当性を判定 ---//
bool is_valid_index(int idx) { return idx >= 0 && idx < nelem; }
public:
//----- 添字範囲エラー -----//
class IdxRngErr {
const Array<Type>* ident;
int idx;
public:
IdxRngErr(const Array<Type>* p, int i) : ident(p), idx(i) { }
int Index() const { return idx; }///////////////ここです。
const Array<Type>* aIdent() { return ident; }
};
//--- 明示的コンストラクタ ---//
explicit Array(int size, const Type& v = Type()) : nelem(size) {
vec = new Type[nelem];
for (int i = 0; i < nelem; i++)
vec[i] = v;
}
//--- コピーコンストラクタ ---//
Array(const Array<Type>& x) {
if (&x == this) { // 初期化子が自分自身であれば…
nelem = 0;
vec = NULL;
}
else {
nelem = x.nelem; // 要素数をxと同じにする
vec = new Type[nelem]; // 配列本体を確保
for (int i = 0; i < nelem; i++) // 全要素をコピー
vec[i] = x.vec[i];
}
}
//--- デストラクタ ---//
~Array() { delete[] vec; }
//--- 要素数を返す ---//
int size() const { return nelem; }
//--- 代入演算子= ---//
Array& operator=(const Array<Type>& x) {
//
std::cout << "代入演算子\n";
if (&x != this) { // 代入元が自分自身でなければ…
if (nelem != x.nelem) { // 代入前後の要素数が異なれば…
delete[] vec; // もともと確保していた領域を解放
nelem = x.nelem; // 新しい要素数
vec = new Type[nelem]; // 新たに領域を確保
}
for (int i = 0; i < nelem; i++) // 全要素をコピー
vec[i] = x.vec[i];
}
return *this;
}
//--- 添字演算子[] ---//
Type& operator[](int i) {
if (!is_valid_index(i))
throw IdxRngErr(this, i); // 添字範囲エラー送出
return vec[i];
}
//--- const版添字演算子[] ---//
const Type& operator[](int i) const {
if (!is_valid_index(i))
throw IdxRngErr(this, i); // 添字範囲エラー送出
return vec[i];
}
};
#endif
int main()関数部
int main() {
Array<int> x(5);
Array<double> y(4);
cout <<"添え字数int "<< x.size()<<'\n';
cout << "添え字数double " << y.size() << '\n';
while (1) {
int t = 0;
int n = 0;
double d = 0.0;
cout << "添え字を入力:";
cin >> n;
try {
int i = 0;
for (i = 0; i < n; i++) {
x[i] = i;
// y[i] = d;
}
} catch (Array<int>::IdxRngErr& x) {
Array<int> const *ptr = x.aIdent();
//ここです↓/////////////////////////////////////////////////
cout << "int 要素数範囲エラー" << ptr->size() << '\n\n';
//cout << "int 要素数範囲エラー" << x.Index() << '\n\n';
//cout<<"要素数範囲エラー"<< y.Index()<<'\n';
//continue;
} catch (Array<double>::IdxRngErr& x) {
//t = 0;
cout << "double 要素数範囲エラー" << x.Index() << '\n\n';
continue;
}
cout << "\n\n\n";
//t = 0;
}
_getch();
return 0;
}