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()代码叫做main1
- A a;
- B b;
- a.print();
- b.print();
- }
- 通过class A和class B的print()这个接口,可以看出这两个class因个体的差异而采用了不同的策略,输出的结果也是我们预料中的,分别是This is A和This is B。但这是否真正做到了多态性呢?No,多态还有个关键之处就是一切用指向基类的指针或引用来操作对象。那现在就把main()处的代码改一改。
- int main(){ //main2
- A 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吗?
- };
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
vector容器是一个模板类,可以存放任何类型的对象(但必须是同一类对象)。vector对象可以在运行时高效地添加元素,并且vector中元素是连续存储的。
1、创建
先创建两个精灵: 创建容器
- Alpha:
- auto sp_array = Array::create();
- beta:
- Vector sp_vec;
- Alpha:
- sp_array->addObject(sp1);
- sp_array->addObject(sp2);
- sp_vec.pushBack(sp1);//和 堆栈 一样一样的
- sp_vec.pushBack(sp2);
- int count = sp_array->count();
- int count = sp_vec.size();
- 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的新特性
- }