常成员函数
const对象只能调用常成员函数
const Node* node = Node::create();
node->setPostion(ccp(0,0)); //出错
node->getPostion(); //不会报错
//定义
{
const Vec2& Node::getPostion() const{
return _postion;
}
}
联合关键字
将包含的值全部放在一个内存里, 想取内部任意一个类型, 都从同一个地址取值, 节省变量占用的空间
auto val = cocos2d::Value();
value.asInt();
//定义
union{
unsigned char byteVal;
int intVal;
float floatVal;
double doubleVal;
bool boolVal;
std::string* strVal;
ValueVector* vectorVal;
ValueMap* mapVal;
ValueMapIntKey* intKeyMapVal;
}_field;
多重继承
//c同时继承a和b
ClassC* clsC = new ClassC;
//没有问题
ClassA* clsA = (ClassA*)clsC;
ClassB* clsB = (ClassB*)clsC;
//有问题!!!!
ClassA* clsA = (ClassA*)clsC;
ClassB* clsB = (ClassB*)clsA;
//没有问题
ClassA* clsA = (ClassC*)clsC;
ClassB* clsB = (ClassC*)clsA;
//定义A
class ClassA{
protected: int _valueA;
public:
ClassA();
virtual ~ClassA();
int getValueA();
}
ClassA::ClassA():_valueA(10){}
ClassA::~ClassA(){}
int ClassA::getValueA(){
return _valueA;
}
//定义B
class ClassB{
protected: int _valueB;
public:
ClassB();
virtual ~ClassB();
int getValueB();
}
ClassB::ClassB():_valueB(20){}
ClassB::~ClassB(){}
int ClassB::getValueB(){
return _valueB;
}
//定义C
class ClassC:public ClassA, public ClassB{
public:
ClassC();
virtual ~ClassC();
}
ClassC::ClassC(){}
ClassC::~ClassC(){}
auto关键字
自动识别变量的类型
//使用方法
auto a=1;
auto b=3;
a=true;//不会报错, 自动将boolean转换为int类型
a=cocos2d::Node::create();//报错, 无法转换为int类型
//auto lambda参照lambda
//智能指针 转换方法
auto obj= std::shared_ptr<ClassC>(new ClassC);
auto objA= std::static_pointer_cast<ClassA>(obj);
auto objB= std::static_pointer_cast<ClassB>(obj);
lambda表达式
匿名函数表达式
auto func1=getAddFunc(10);
auto func2=getAddFunc(20);
//定义
std::function<int(int b)> getAddFunc(int a);
std::function<int(int b)> MyClass::getAddFunc(int a){
auto func=[a](int b){
return a+b;
}
return func;
}
标准库Vector排序
参考: http://blog.csdn.net/ihadl/article/details/7400929
其他参考:
allocating an object of abstract class type “xxxx”解决办法
C++ 报错:allocating an object of abstract class type “xxxx”通常是该类,有未实现的虚函数,需要实现。