偶然想到,如何通過父類來獲取子類的一切內容?答案是否,子類存在的意義就是青出於藍勝於藍,肯定是有其區別其父類的(新加的函數,變量等)。而目前也沒有想到類似的應用場景呢,更多的時候多態Public函數就能夠應對。不過,天無絕人之路,如果通過子類函數返回子類的指針(引用同理)那就相當於拿到子類的對象了,具體如下:
class Son; // 前置聲明
class Father {
public:
virtual Son& GetSonInstall(void){
return *(Son*)NULL;
}
};
class Son :public Father {
public:
Son& GetSonInstall(void){
return *this;
}
void Test(void){
printf("Test\n");
}
};
int main(void)
{
Father *pFather = new Son;
pFather->GetSonInstall().Test();
while (1);
return 0;
}
這樣在調用pFather->GetSonInstall().Test();這句的時候相當於拿到Son的對象實例了(this指針),那就理所當然的可以獲取這個類所有的內容了。