子類調用父類方法:c++和java的不同

子類調用父類方法: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;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章