Как уже упоминалось в [9.2.2.1/1] рабочего проекта (далее этот указатель):
Тип этого в функции-члене класса X является X *.
Обратите внимание, что конструктор является специальной функцией члена и A
является подобъектом B
, таким образом, this
указателя внутри тела функций членов A
имеет типа A*
, в то время как он тип B*
в пределах функции-члены от B
.
Обратите также внимание на то, что от A
и this
от B
также могут иметь разные значения, то есть они могут указывать на разные подобъекты.
В качестве примера:
#include<iostream>
struct A {
A() { std::cout << this << std::endl; }
int i{0};
};
struct B: A {
B() { std::cout << this << std::endl; }
virtual void f() {}
};
int main() {
B b;
}
Это сказал:
Означает ли это тип этот указатель, переданный в конструктор A()
имеет тип A
?
Нет, это не так. Это тип A*
.
EDIT
Несмотря на О.П. редактировал вопрос и изменил его смысл, я предпочел бы оставить в этом ответ на цитату из оригинального вопроса.
Откат может быть правильным действием для этого редактирования.
В любом случае, ответ по-прежнему применяется.
В вашем коде нет виртуальных машин, поэтому все набираемые файлы выполняются исключительно статически. – Angew
@Angew: Это очень мало связано с этим вопросом. –
@ Если я добавлю виртуальный метод в A, вывод все равно будет таким же, хотя – Loay