子類調用父類方法:c++和java的不同
bool GameScene::init(){
if (!Layer::init())
{
return false;
}
}
我自定義了一個場景,在場景的初始化中,有這麼一句:
Scene::init()
到這裏,我百思不得其解,爲什麼呢?
下面分析:
因爲我是一名java程序員,按照java的思想,使用類名調用的方法,就是靜態方法,並且是全局的。因此到了這句,我就認爲是調用了父類的一個全局函數。
這豈能怨我,誰然c++中的子類調用父類的方法,寫成是:Scene::init()這種方式呢?這明顯是java調用全局方法的寫法嗎,是不是。
從上面可以看出來,在這一點,java和c++是有很大的區別的,所以說,想學語言,首先要去學習java,因爲簡單呀,之後再去學習c,然後再來學習c++,因爲東西太多了。
廢話不多說了,現在來說一下上面的例子,其實很簡單:
Scene::init()這個調用就是c++中很經常的調用,子類調用父類的方法,和java中的super.init()是一個概念,不存在什麼全局不全局的問題。
補充一點:上面的是普通方法的子父類調用,對於構造函數裏面,和上面所說的也完全一樣,如下:
看到了麼?就是這麼簡單。這個千萬要和java區分開來。
class A
{
public:
A()
{
printf("aaaa\n");
}
~A()
{
printf("~~~~~aa\n");
}
};
class B : public A
{
public:
B()
{
A::A();
printf("bbbb\n");
}
~B()
{
A::~A();
printf("~~~~bbb\n");
}
};
void main(void)
{
B c;
}
接下來看一下調用了父類的什麼方法?
bool Layer::init()
{
bool ret = false;
do
{
Director * director;
CC_BREAK_IF(!(director = Director::getInstance()));
this->setContentSize(director->getWinSize());
// success
ret = true;
} while(0);
return ret;
}