您的位置:首页 > 编程语言 > C语言/C++

子类调用父类方法:c++和java的不同

2014-01-31 14:35 387 查看
子类调用父类方法: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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 语言 程序员 class c++
相关文章推荐