我正在QtDesigner上开发应用程序。我已经将几个QPushButtons提升为MyButton。 MyButton只是扩展了QPushButton并添加了一个int属性。 在项目上工作时,我注意到我忘了升级我的QPushButton了,所以我开始徘徊,尽管我在不拥有该属性的对象上设置了属性,但为什么我的代码仍然可以工作。 通过将QPushButton指针强制转换为MyButton Pointer来设置对象的属性。
((MyButton*) ui->btnScreen)->intAttribute = 11;
cout << ((MyButton*) ui->btnScreen)->intAttribute << endl;
我没有收到错误,并且在控制台上得到了
11
那么,这意味着我不是对指针进行强制转换,而是直接对对象进行转换吗?
添加
假设我有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异常而不是打印出HELLO?