添え字演算子 [] がオーバーロードされているクラスの配列

二次元配列と同じで、添え字の順番を間違えたら大変な事になります。
(かけ算九九の表なら、値は変わらないかもしれませんが。)
たとえばSTLvectorそのものの配列はどうなのか。

これで一目瞭然です。

std::vector<int> v[3];
v[1].push_back(99);

// 今プッシュした99を表示する
std::cout << v[1][0] << '\n';

最初のでどの要素を使うかの指定し、
その次の
はvectorの添え字演算子を呼び出しているんだと思います。
よくよく考えれば当たり前なのかもしれませんが。

vectorの存在を忘れてて自分で書いたテストコード

無駄な労力を使ってしまったので、これも載せておきます。

/*
 * 添え字演算子をオーバーロードしてみたクラスの配列のテスト。
 * (添え字の順番がわからない。)
 */
#include <iostream>
using namespace std;

/*
 * Test class
 */
class Test
{
private:
	int i;	// 何かのデータ

public:
	// コンストラクタ
	Test( int _i = 0) : i(_i) {}

	// []演算子のオーバーロード
	int &operator[]( int worm)
	{
		// 引数のwormは無視して、iへの参照を返す。
		// (添え字らしい動作をしないけどテストだから。)
		return this->i;
	}
};

/*
 * Main
 */
int main()
{
	// 添え字が300だろうと400だろうと、とにかくiへの参照を返す
	Test obj = 20;
	cout << obj[300] << '\n';

	// 以下が本命。Testの配列。
	Test array[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, };
	cout << array[2][5] << '\n';	// 何が表示されるでしょうか? 2? 5?

	return 0;
}

08/12/02 追記

もう少し納得のいきそうな説明もできます。

// 注:MyClassは添え字演算子がオーバーロードされているとする。
vector<MyClass> v(10);	// 前もって10個分確保
v[2][3] = 10;

これがどんな仕事をするのかは脳内補完してください。
上記のコードは以下のものと同じです。

vector<MyClass> v(10);	// 前もって10個分確保
v.operator[](2).operator[](3) = 10;

このコードとそのコメント以上の説明は必要ないと思ったりしてますが、
要はvectorのoperatorを呼び出したらMyClass型のオブジェクトが得られて、
そのオブジェクトに対し、operator
を呼び出してると。
多分そんな感じ。