迭代器的功能:提供一种统一的方式,来透明的遍历容器理解begin()方法,end()方法,,的用处其中C11中提供的foreach的方式,其底层还是通过迭代器来进行遍历的. include<iostream> usingnamespacestd; classMyString2{ public: //构造函数 MyString2(constcharpSource=nullptr){ if(pSource!=nullptr){ pString=newchar[strlen(pSource)+1]; strcpy(pString,pSource); } ...

  xs9mrAcZVTZn   2023年11月02日   41   0   0 C++

我们之前有<C模板编程模块>中的第<四>节理解空间配置器allocator优化STL中的Vector我将在此基础上加入迭代器功能代码 Iterator为什么可以遍历所有的容器的方式都一样? autoit=continer.beign(); for(;it!=continer.end();it){ cout<<it<<endl; } //我们在自己的容器里的Iterator的运算,运算由自己来实现,所有对外部使用者来看都是统一的. //泛型算法能够给所有的容器都使用,也是基于容器对外提供了统一的遍历接口,其参数接受的都是容器的迭代器 in...

  xs9mrAcZVTZn   2023年11月02日   60   0   0 C++

new,delete运算符 intp=newint; deletep; 看一下汇编代码 可以看到new和delete运算符其实也是operator运算符重载函数的调用 malloc和newmalloc按字节开辟内存new在开辟内存的时候需要指定类型newint[10]malloc返回的是void而operatornew会帮助转为intmalloc只负责开辟空间,new不仅仅有malloc的功能,可以进行数据的初始化newint(20)newint100;malloc开辟失败返回nullptr指针,new开辟失败是抛出bad_alloc的异常 try{ intp=newint; delete...

  xs9mrAcZVTZn   2023年11月02日   49   0   0 C++

MyQueue版本1 include<iostream> usingnamespacestd; template<typenameT> classMyQueue{ private: structQueueItem{ QueueItem(T_data=T(),QueueItem_next=nullptr) :data(_data), next(_next){ next=nullptr; } Tdata; QueueItemnext; }; QueueItem_front;//指向队头 QueueItem_rear;//指向队...

  xs9mrAcZVTZn   2023年11月02日   15   0   0 C++

1:继承的本质和原理2:派生类的构造过程3:重载,覆盖,隐藏4:静态绑定和动态绑定5:多态,vfptr,vftable6:抽象类的设计原理7:多重继承以及问题8:虚基类vbptr和vbtable9:RTTI10:C四种类型强转 继承的本质和原理1:代码的复用类和类之间的关系组合:apartof.....一部分的关系继承:akindof.....一种的关系 //代码1: classA{ public: intma; protcted: intmb; private: intmc; } classB{ public: intmd; intma; potected: intme; intmb;...

  xs9mrAcZVTZn   2023年11月02日   18   0   0 C++

派生类从继承可以继承来所有的成员(变量和方法)除了构造函数和析构函数派生类怎么初始化从基类继承来的成员变量的呢?通过调用基类的构造函数来初始化 派生类的构造函数和析构函数,负责初始化和清理派生类部分派生类从基类继承来的成员的初始化和清理由谁负责?是由基类的构造和析构函数来负责 派生类对象的构造和析构的过程是:1:派生类调用基类的构造函数,初始化化从基类继承来的成员2:调用派生类自己的构造函数,初始化派生类自己特有的成员 .....派生类对象的作用域到期了3:调用派生类的析构函数,释放派生类成员可能占用的外部资源(堆内存,文件)4:调用基类的析构函数,释放派生类内存中,从基类继承来的成员可能占用...

  xs9mrAcZVTZn   2023年11月02日   38   0   0 C++

重载关系一组函数要重载,必须处在同一个作用域中,而且函数名字相同,参数列表不同代码1中的Base中的show()和show(int)属于重载代码2中的Base中的show()和Derive中的show()不属于重载不在同一个作用域下面 隐藏/重定义的关系(主要是指作用域隐藏)在继承结构当中,当子类和父类中有同名成员时,子类成员会隐藏父类成员.子类成员和父类成员构成隐藏关系,也叫重定义。只要函数名相同,就构成隐藏关系。想要调用父类的成员就要指定作用域,显式的调用。子类把基类的同名成员全部都给隐藏掉了,只要名字相同就会发生隐藏,无所谓子类函数的返回值,参数列表是否与父类一致.例如代码2中的Deri...

  xs9mrAcZVTZn   2023年11月02日   25   0   0 C++

代码1 classBase { public: Base(intdata=10):ma(data){ cout<<"Base()"<<endl; } voidshow(){cout<<"BaseShow()"<<endl;} voidshow(int){cout<<"BaseShow(int)"<<endl;} Base(){cout<<"Base()"<<endl;} protected: intma; }; classDerive:publicBase { public: De...

  xs9mrAcZVTZn   2023年11月02日   52   0   0 C++

问题一:哪些函数不能实现成虚函数虚函数依赖:1:虚函数能产生地址,存储在vftable中2:对象必须存储在vfptr->vftable->虚函数地址 构造函数1:virtual+构造函数(NO,不可以在构造函数前加virtual 2:构造函数中调用的任何函数,都是静态绑定(lg:派生类对象构造过程中,先调用基类的构造函数,由于要通过对象拿到内存中的虚函数表指针,此时基类对象还没有构造出来,如何实现动态绑定?) static静态成员方法,也不可以加virtual,static静态成员方法的调用不基于对象 析构函数可以加virtual,析构函数调用的时候,对象是存在的,所以可以通过对象...

  xs9mrAcZVTZn   2023年11月02日   48   0   0 C++

问题:是不是虚函数的调用就一定是动态绑定?不是的1:在类的构造函数当中,调用虚函数,也是静态绑定(构造函数中对虚函数的调用不发生动态绑定)2:如果不是通过指针或者引用变量来调用虚函数,那就是静态绑定 代码1 classBase { public: Base(intdata=10):ma(data){ cout<<"Base()"<<endl; } //虚函数 virtualvoidshow(){cout<<"BaseShow()"<<endl;} //虚函数 virtualvoidshow(int){cout<<"Base...

  xs9mrAcZVTZn   2023年11月02日   27   0   0 C++

抽象类和普通类有什么区别?抽象类一般不用作抽象实体类型一般把上面类设计为抽象类?基类 定义抽象类的唯一目的,就是去建立派生类.我们在抽象类基础上要定义出功能各异的派生类,再用这些派生类去建立对象.凡是包含纯虚函数的类都是抽象类.纯虚函数不用实现,故不能被调用,抽象类无法建立对象.抽象类的作用是作为一个类簇的共同基类,即为一个类簇提供一个公共接口. 许多好的面向对象的系统,其层次结构的顶部是一个抽象类,甚至顶部有好几层都是抽象类.如果在抽象类所派生出的新类中对基类的所有纯虚数进行了定义.那么这些函数就被赋予了具体的功能,可以被调用.这个派生类就不是抽象类,而是可以用来定义对象的具体类(concr...

  xs9mrAcZVTZn   2023年11月02日   53   0   0 C++

理解多态多种多样的形态(静态多态,动态多态)静态多态(编译时期) 1:函数重载 boolcomparet(int,int);boolcompare(double,double); compare(100,100)->compare_int_int(); compare(1.0,2.0)->comapre_double_double(); 2:模板 template<typenameT> boolcompare(Ta,Tb){ returna>b; } compare<int>(20,10);=>int实例化compare(intx,inty...

  xs9mrAcZVTZn   2023年11月02日   69   0   0 C++

虚基类/抽象类抽象类:有纯虚函数的类 代码1 classA{ public: intma; protcted: intmb; private: intmc; } //B继承A, classB:publicA{ public: intmd; potected: intme; private: intmf; } 虚继承通过修饰继承方式,如代码2是虚继承,被虚继承的类称为虚基类 虚继承派生类的内存布局方式先是vbptr=>派生类的数据=>基类的数据,对比代码1和代码2,发现原本基类数据在前面,派生类数据在后面,但是在虚继承的时候基类数据方式放到了后面,前面放了vbptr和派生...

  xs9mrAcZVTZn   2023年11月02日   81   0   0 C++

代码1 include<iostream> usingnamespacestd; classA{ public: A(int_a):ma(_a){ cout<<"A()"<<endl; } A(){ cout<<"A()"<<endl; } protected: intma; }; classB:publicA{ public: B(int_b):A(_b),mb(_b){ cout<<"B()"<<endl; } B(){ cout<<"B()"<<...

  xs9mrAcZVTZn   2023年11月02日   52   0   0 C++

C语言中我们使用inta=(int)b;的方式强制转换 C提供了四种类型转换方式 const_cast 通过const_cast运算符,也只能将consttype转换为type,将consttype&转换为type&。 也就是说源类型和目标类型除了const属性不同,其他地方完全相同 把常量属性去掉的一个转换. constinta=10; intp1=(int)(&a);//C语言OK intp2=const_cast<int>(&a);//OK doublep3=(double)(&a)//c语言中可以,p3的寻址范围变大,带来风险...

  xs9mrAcZVTZn   2023年11月02日   76   0   0 C++

代码1 include<iostream> usingnamepspacestd; classTest { public: Test(inta=10):ma(a){cout<<"Test()"<<endl;} Test(){cout<<"Test()"<<endl;} Test(constTest&t):ma(t.ma){cout<<"Test(constTest&t)"<<endl;} Test&operator=(constTest&t){ if(this&am...

  xs9mrAcZVTZn   2023年11月02日   49   0   0 C++

代码1 usingnamespacestd; classTestV2{ public: TestV2(inta=10):ma(a) { cout<<"TestV2(int)"<<ma<<"对象地址="<<this<<endl; } TestV2() { cout<<"TestV2()"<<ma<<"析构对象地址="<<this<<endl; } TestV2(constTestV2&t):ma(t.ma) { cout<<"TestV2(constTest...

  xs9mrAcZVTZn   2023年11月02日   35   0   0 C++

代码1 include<iostream> include<functional> include<cstdio> include<cstring> usingnamespacestd; classMyString3{ public: MyString3(constcharpChar=nullptr){ if(pCharnullptr){ this->pString=newchar[1]; this->pString[0]='\0'; } else{ intlen=strlen(pChar...

  xs9mrAcZVTZn   2023年11月02日   36   0   0 C++

代码1 intmain(){ //裸指针,手动开辟,需要自己释放,如果忘记了或者因为 //程序逻辑导致p没有释放,那么就会导致内存泄漏 intp=newint(10); if(){ retur-1; } deletep; return0; } 有没有什么办法帮我们管理指针,确保资源释放?智能指针利用栈上的对象出作用域时自动析构的特征,来做到资源的自动释放问题:是否可以在堆上创建裸指针?语法上没有问题,但是我们正式希望栈上对象出作用域能自动析构的特征来达到自动管理指针的目的,如果将智能指针创建在堆上,那又和原来的裸指针使用遇到的问题是一样的了需要手动delete 代码2 include&lt...

  xs9mrAcZVTZn   2023年11月02日   78   0   0 C++

代码1 include<iostream> include<thread> usingnamespacestd; classA{ public: A(){cout<<"A()"<<endl;} A(){cout<<"A()"<<endl;} voidfuncA(){ cout<<"Afunction()"<<endl; } }; voidthread_Handler(Apa){ std::this_thread::sleep_for(std::chrono::seconds(...

  xs9mrAcZVTZn   2023年11月02日   89   0   0 C++
关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~