以前整理的C++资料(一)

来源:互联网 发布:三星scx3400扫描软件 编辑:程序博客网 时间:2024/05/18 16:14

此文所有代码并无连贯性,只是做的笔记!

vector<string> vec;vec.push_back("aaaa");vec.push_back("bbb");vec.push_back("cccc");

普通for循环,加强for循环(适用于只遍历,不修改),迭代器(适用于所有情况)。

for(int i=0;i<vec.size();++i){  string s=vec[i];  cout<<s.c_str()<<endl;}for(string it:vec){   cout<<it.c_str()<<endl;}for(auto it=vec.begin();it!=vec.end();++it){   cout<<(*it).c_str()<<endl;}auto it=vec.begin();it=vec.erase(it);

C->C++,直接赋值
C++->C,用c_str()函数

node所有的元素
scene(场景)上有layer(层),层上有sprite(精灵)。

void Fish::move(){   cout<<"fish is moving!"<<endl;}class Fish{    Fish();    virtual ~Fish();    int x;    int y;    string z;    void move();};Fish::Fish():x(0),y(0),z(""){}Fish::~Fish(){}

方法一:
Fish f;//直接一个对象
f.move();
方法二:
Fish* pf=new Fish();//一个指针
pf->move();
(*pf).move();一个效果

& *
声明变量时,&表示声明一个引用 *声明一个指针
在表达式中,&表示取地址,*表示取内容

int jj=1;int* ii=&jj;int* ii2=ii;(*ii2)=3cout<<jj<<endl;//(jj=3)int& rjj=jj;(引用)//一个别名而已

对引用赋值相当于对变量赋值
对指针赋值,不会改变指针所指的内容

内存泄露
测试函数

void test(){    while(true){       Fish* f=new Fish();      }}

解决方法是加: delete f;

成员函数与静态函数(单例模式)

class Director{    public:       ~Director();    private:       Director();    //静态的本类实例    static Director* instance;    public:    //获得静态的本类实例    static Director* getInstance();};Director* Director::instance=nullptr;Director* Director::getInstance(){    if(instance=nullptr){instance=new Director();}//有疑问}auto d=Director::getInstance();

成员函数需要通过对象或是对象的指针来调用,静态函数只能通过类名来调用

指针4字节(32位),8字节(64位)

继承与多态
子类构造函数在创建对象时一定会先调用父类构造函数

player构造
MT构造
我动了
MT析构
player析构(栈结构)

可以把子类的对象或是指针赋值给父类的对象或指针,让代码更加灵活。
MT t;
player p;
p=t;
player* pt=new MT();

一旦子类被赋值给(当成)父类,父类就不具有子类的特性(就只能调用父类所定义的方法)。

可以把父类对象强制转换为子类对象

MT* mt=static_cast<MT*>(pt);mt->chongFeng();

虚函数:支持动态绑定函数,编译时不确定函数的执行者,运行时再绑定到具体的对象上。

为什么析构函数一般情况下要声明为虚函数呢?
因为只有虚函数才支持动态绑定(和对象有关,和声明无关)
如果一个子类的对象,交给了父类的指针,然后去delete这个父类指针,会导致子类的析构函数无法执行。

函数指针(分离函数的地址与执行)

void (*f)(int)=&testfun1;//不执行函数f(1);//执行函数testfun1(1);//等同于上面两个语句结合void testfun1(int i){    cout<<fun1<<endl;}

新版C++ 11标准(推荐)

#include <functional>function<void(int)> f2=&testfun1;f2(1);function<int(int,int)> f3=[](int a,int b){   return a+b;}//lambda表达式(匿名函数表达式)int result=f3(1,2)//如果是成员函数Fish fish;Fish fish2;//由于成员函数必须绑定到某个对象身上执行,要把成员函数交个functionfunction<void()> f4=bind(&Fish::sayHello,fish);f4();
0 0
原创粉丝点击