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