Я разрабатываю приложение на QtDesigner. Я продвинул несколько QPushButtons на MyButton. MyButton просто расширяет QPushButton и добавляет к нему атрибут int. Работая над проектом, я заметил, что забыл рекламировать один из своих QPushButton, поэтому я начал блуждать, почему мой код все еще работает, хотя я установил атрибут для объекта, которому он не принадлежит. Атрибут объекта устанавливается путем приведения указателя QPushButton к указателю MyButton.
((MyButton*) ui->btnScreen)->intAttribute = 11;
cout << ((MyButton*) ui->btnScreen)->intAttribute << endl;
Я не получаю ошибки и на консоли получаю
11
Итак, это означает, что яне выполняет приведение к указателю, а непосредственно к объекту?
ADDED
Допустим, у меня есть ClassA и ClassB, которые расширяют ClassA.
int main(int arg,char** argv)
{
ClassA a;
ClassB *pB;
pB = (ClassB *) &a;
pB->foo();
return 0;
}
class ClassA{
public:
ClassA(){}
};
class ClassB : public ClassA {
public:
void foo(){
cout<<"HELLO"<<endl;
}
};
ПочемуЯ не получаю распечатку SIGSEGV Exception вместо HELLO?