(8) cocos2d-x中相关的一些C++函数

(8) cocos2d-x中相关的一些C++函数,第1张

概述1. Virtual是C++ OO机制中很重要的一个关键字。只要是学过C++的人都知道在类Base中加了Virtual关键字的函数就是虚函数。虚函数的作用是为了实现多态(Polymorphism),下面是网上的一个例子,看代码  class A{public:void print(){ cout<<”This is A”<<endl;}}; class B:public A{public:

1. Virtual是C++ OO机制中很重要的一个关键字。只要是学过C++的人都知道在类Base中加了Virtual关键字的函数就是虚函数。虚函数的作用是为了实现多态(polymorphism),下面是网上的一个例子,看代码

class A{public:voID print(){ cout<<”This is A”<<endl;}};
class B:public A{public:voID print(){ cout<<”This is B”<<endl;}};
int main(){   //为了在以后便于区分,我这段main()代码叫做main1A a;B b;a.print();b.print();}
通过class A和class B的print()这个接口,可以看出这两个class因个体的差异而采用了不同的策略,输出的结果也是我们预料中的,分别是This is A和This is B。但这是否真正做到了多态性呢?No,多态还有个关键之处就是一切用指向基类的指针或引用来 *** 作对象。那现在就把main()处的代码改一改。int main(){   //main2A a;B b;A* p1=&a;A* p2=&b;p1->print();p2->print();}运行一下看看结果,哟呵,蓦然回首,结果却是两个This is A。问题来了,p2明明指向的是class B的对象但却是调用的class A的print()函数,这不是我们所期望的结果,那么解决这个问题就需要用到虚函数
class A{public:virtual voID print(){ cout<<”This is A”<<endl;}  //现在成了虚函数了};
class B:public A{public:voID print(){ cout<<”This is B”<<endl;}  //这里需要在前面加上关键字virtual吗?};
毫无疑问,class A的成员函数print()已经成了虚函数,那么class B的print()成了虚函数了吗?回答是Yes,我们只需在把基类的成员函数设为virtual,其派生类的相应的函数也会自动变为虚函数。所以,class B的print()也成了虚函数。那么对于在派生类的相应函数前是否需要用virtual关键字修饰,那就是你自己的问题了。现在重新运行main2的代码,这样输出的结果就是This is A和This is B了。现在来消化一下,我作个简单的总结,指向基类的指针在 *** 作它的多态类对象时,会根据不同的类对象,调用其相应的函数,这个函数就是虚函数。

2. sprintf()函数:把格式化的数据写入某一个字符串中

函数原型:int sprintf( char *buffer,const char *format [,argument] … );返回值:字符串长度(strlen)例子:char* who = "I";char* whom = "CSDN";sprintf(s,"%s love %s.",who,whom); //产生:"I love CSDN. "  这字符串写到s中sprintf(s,"%10.3f",3.1415626); //产生:" 3.142"

3. 创建一个飞机单例

PlaneLayer* PlaneLayer::create() {

PlaneLayer *pRet = new PlaneLayer();

if (pRet && pRet->init()) {

pRet->autorelease();

sharedplane = pRet;//赋值给单例变量

return pRet;

} else {

CC_SAFE_DELETE(pRet);

return NulL;

}

}


4.static_cast < type-ID > ( Expression )该运算符把Expression转换为type-ID类型。


5. vector

@H_403_88@vector容器是一个模板类,可以存放任何类型的对象(但必须是同一类对象)。vector对象可以在运行时高效地添加元素,并且vector中元素是连续存储的。

vector的构造 函数原型:template<typename T>   explicit vector();                                 // 默认构造函数,vector对象为空   explicit vector(size_type n,const T& v = T());    // 创建有n个元素的vector对象   vector(const vector& x);   vector(const_iterator first,const_iterator last);
1、创建
先创建两个精灵: auto sp1 = Sprite::create("Closenormal.png"); sp1->setposition(Point(100,100)); this->addChild(sp1,1); auto sp2 = Sprite::create("CloseSelected.png"); sp2->setposition(Point(100,200)); this->addChild(sp2,1); 复制代码 创建容器 Alpha: auto sp_array = Array::create(); beta: Vector sp_vec; 2、将创建好的精灵添加进容器中 Alpha: sp_array->addobject(sp1); sp_array->addobject(sp2); sp_vec.pushBack(sp1);//和 堆栈 一样一样的 sp_vec.pushBack(sp2); 3、获得容器中的大小 int count = sp_array->count(); int count = sp_vec.size(); 4、获得容器中的精灵,并让这些元素都做统一的动作 for(int i=0;icount();i++) { auto sp = (Sprite*)sp_array->getobjectAtIndex(i); sp->runAction(Moveto::create(0.2f,Point(100,100))); } for( auto& e : sp_vec) e->runAction(Moveto::create(0.2f,100)));//这种for写法是C++ 11的新特性 } 5、删除容器中的精灵removeLastObject(); sp_vec.popBack(); //如果是直接删除对象: sp_array->removeObject(sp1); sp_vec.eraSEObject(sp1); //如果是要删除容器中全部的对象: sp_array->removeAllObject(); sp_vec.clear(); 复制代码 6. struct timeval :有两个成员,一个是秒,一个是微秒,所以最高精确度是微秒。 一般由函数int gettimeofday(struct timeval *tv,struct timezone *tz)获取系统的时间。 总结

以上是内存溢出为你收集整理的(8) cocos2d-x中相关的一些C++函数全部内容,希望文章能够帮你解决(8) cocos2d-x中相关的一些C++函数所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1008122.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存