Почему приложение Qt c ++ не создает исключение при создании экземпляра атрибута для объекта, у которого его нет? - PullRequest
0 голосов
/ 08 ноября 2019

Я разрабатываю приложение на 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...