Но это относится к разным вещам.
void bar() {
cout << this << endl;
}
Здесь this
имеет тип A*
. Он указывает на ту часть объекта, которая является A
.
out << c << endl;
Здесь c
является C*
и указывает на ту часть объекта, которая является C
.
Если объект A
точно совпадает с объектом C
, указатели совпадают. Если они этого не делают (например, когда C содержит другие члены (скрытый указатель на vtable) и, следовательно, часть 'A' смещена относительно начала более крупного объекта), указатели не обязательно совпадают.