ご質問させてください。

class Test {
public:
  Test() { c = 'T'; i = 10; };

  char getChar() { return c; };
  int getInt() { return i; };

private:
  int i;
  char c;
};

int main()
{
  Test t;

  printf("t.i = %d, t.c = %c\n", t.getInt(), t.getChar());
  printf("t = %d\n", t);

  return 0;
}

としたとき、1つ目のprintf()関数で値を取得出来るのは分かるのですが、
2つ目のprintf()関数でも、最初に定義されたメンバ変数の値(つまりt.getInt()と同じ値)が
取得出来るようです。

値を書き換えることは出来ないとは言え、実質privateメンバ変数の値に
publicメンバ関数を通さずにアクセスできていることになりますが、
これは言語仕様でしょうか?