11 2022 档案
摘要:C语言中我们使用 int a=(int) b;的方式强制转换 C++提供了四种类型转换方式 const_cast 通过const_cast运算符,也只能将const type转换为type,将const type&转换为type&。 也就是说源类型和目标类型除了const属性不同,其他地方完全相同
阅读全文
摘要:代码1 #include <iostream> using namespace std; class A{ public: A(int _a):ma(_a){ cout<<"A()"<<endl; } ~A(){ cout<<"~A()"<<endl; } protected: int ma; };
阅读全文
摘要:虚基类/抽象类 抽象类:有纯虚函数的类 代码1 class A{ public: int ma; protcted: int mb; private: int mc; } //B继承 A, class B : public A{ public: int md; potected: int me; p
阅读全文
摘要:理解多态 多种多样的形态(静态多态,动态多态) 静态多态(编译时期) 1:函数重载 bool comparet(int ,int); bool compare(double,double); compare(100,100)->compare_int_int(); compare(1.0,2.0)-
阅读全文
摘要:抽象类和普通类有什么区别? 抽象类一般不用作抽象实体类型 一般把上面类设计为抽象类? 基类 定义抽象类的唯一目的, 就是去建立派生类. 我们在抽象类基础上要定义出功能各异的派生类, 再用这些派生类去建立对象. 凡是包含纯虚函数的类都是抽象类. 纯虚函数不用实现, 故不能被调用, 抽象类无法建立对象.
阅读全文
摘要:问题:是不是虚函数的调用就一定是动态绑定?不是的 1:在类的构造函数当中,调用虚函数,也是静态绑定(构造函数中对虚函数的调用不发生动态绑定) 2:如果不是通过指针或者引用变量来调用虚函数,那就是静态绑定 代码1 class Base { public: Base(int data=10):ma(da
阅读全文
摘要:问题一:哪些函数不能实现成虚函数 虚函数依赖: 1:虚函数能产生地址,存储在vftable中 2:对象必须存储在 vfptr-> vftable-> 虚函数地址 **构造函数 ** 1:virtual + 构造函数 (NO,不可以在构造函数前加virtual 2:构造函数中 调用的任何函数,都是静态
阅读全文
摘要:代码1 class Base { public: Base(int data=10):ma(data){ cout<<"Base()"<<endl; } void show(){cout<<"Base Show()"<<endl;} void show(int){cout<<"Base Show(i
阅读全文
摘要:重载关系 一组函数要重载,必须处在同一个作用域中 ,而且函数名字相同,参数列表不同 代码1中的Base中的 show() 和show(int) 属于重载 代码2中的Base中的 show() 和Derive中的show()不属于重载不在同一个作用域下面 隐藏/重定义的关系(主要是指作用域隐藏) 在继
阅读全文
摘要:派生类从继承可以继承来所有的成员(变量和方法) 除了构造函数和析构函数 派生类怎么初始化从基类继承来的成员变量的呢?通过调用基类的构造函数来初始化 派生类的构造函数和析构函数,负责初始化和清理派生类部分 派生类从基类继承来的成员的初始化和清理由谁负责?是由基类的构造和析构函数来负责 派生类对象的构造
阅读全文
摘要:1:继承的本质和原理 2:派生类的构造过程 3:重载,覆盖,隐藏 4:静态绑定和动态绑定 5:多态,vfptr,vftable 6:抽象类的设计原理 7:多重继承以及问题 8:虚基类 vbptr 和vbtable 9:RTTI 10:C++四种类型强转 继承的本质和原理 1:代码的复用 类和类之间的
阅读全文
摘要:MyQueue版本1 #include <iostream> using namespace std; template<typename T> class MyQueue { private: struct QueueItem { QueueItem(T _data = T(), QueueIte
阅读全文
摘要:new ,delete 运算符 int *p =new int; delete p; 看一下汇编代码 可以看到new 和delete 运算符其实也是 operator运算符重载函数的调用 malloc和new malloc 按字节开辟内存 new在开辟内存的时候需要指定类型 new int[10]
阅读全文
摘要:我们之前有<C++模板编程模块>中的第<四>节 理解空间配置器allocator优化STL中的Vector 我将在此基础上加入迭代器功能代码 Iterator 为什么可以遍历所有的容器的方式都一样? auto it =continer.beign(); for( ;it!=continer.end(
阅读全文
摘要:迭代器的功能: 提供一种统一的方式,来透明的遍历容器 理解 begin()方法,end()方法, ++ , * 的用处 其中 C++11 中提供的foreach的方式,其底层还是通过迭代器来进行遍历的. #include <iostream> using namespace std; class M
阅读全文
摘要:我们结合运算符重载知识实现string 类 在自己实现的String类中可以参考C++中string的方法 例如构造,加法,大小比较,长度,[] 等操作. 当前的MyString 类中,暂时不加入迭代器,我们将在下一节中加入迭代器的代码. #include <iostream> using name
阅读全文
摘要:C++的运算符重载:使对象的运算表现得和编译器内置类型一样 如下代码,如果T是整形,那很好理解,但是如果 T 是一个 Student 类, a + b ?怎么操作,两个学生类怎么相加? 这个就是我们要说的运算符重载问题 template<typename T> T sum(T a,T b){ ret
阅读全文
摘要:.在上一节我们实现的 MyVector存在哪些问题? 问题1 现在有Student类 class Student{ public: Student(){cout<<"构造Student对象"<<endl;} ~Student(){cout<<"析构Student对象"<<endl;} private
阅读全文
摘要:使用类模板简单实现STL Vector #include <iostream> using namespace std; template<typename T> class MyVector { public: //构造函数 MyVector<T>(int size = 10) { T * _te
阅读全文
摘要:类模板=>实例化=>模板类 通过类模板实现栈,点击查看代码 #include <iostream> #include <cstring> using namespace std; template<typename T> //template<typename T=int> 也可以这样写,写个默认类
阅读全文
摘要:函数模板 模板的意义:对类型也参数化 int sum1(int a,int b){return a+b;} double sum2(double a ,double b){return a+b;} 几个概念 函数模板 模板的实例化 模板函数 模板类型参数 模板非类型参数 模板实参推演 模板的特例化
阅读全文
摘要:指向类成员(成员变量和成员方法)的指针 1:定义一个指针指向类的普通成员变量 示例代码1 class Test2{ public: int ma; static int mb; void f1(){cout<<"Test::void f1()"<<endl;} static void static_
阅读全文
摘要:类的各种成员-> 成员方法 & 成员变量 普通的成员方法=>编译器会添加一个this形参变量 1:属于类的作用域 2:调用该方法时,需要依赖一个对象,而且常对象不能调 3:可以任意的访问对象的私有成员变量 const 常成员方法 => const student *this 1:属于类的作用域 2:
阅读全文
摘要:示例代码1 class CDate{ public: CDate(int _year,int _month, int _day){ this->year=_year; this->month=_month; this->day=_day; } private: int year; int month
阅读全文
摘要:先看示例代码 #include <iostream> #include<cstring> using namespace std; class Student{ public: Student(int _age , const char * _name) { this->age=_age; int
阅读全文
摘要:构造函数 和类名相同,可以带参数,参数可以有多个 定义对象时,自动调用,构造完成了,对象就产生了 构造函数执行完成后,内存开辟完成,同时可以完成初始化工作. 析构函数 ~Test(); 析构函数可以自己调用,不带参数,只有一个析构函数,析构函数调用后,对象不存在了.自己调了析构函数后,就不能在调用对
阅读全文
摘要:C++ 类:实体的抽象类型 实体(属性,行为) ->ADT(abstract data type) 类(属性->成员变量,行为->成员方法) OOP语言4大特征 抽象 封装/隐藏(通过public private protected) 继承 多态 class Student{ //属性一般都是私有的
阅读全文
摘要:new和malloc区别?delete和free区别? malloc和free是C语言的库函数 new和delete叫做运算符 malloc是否开辟成功是通过返回值和空指针比对判断.而new开辟失败会抛出异常 bad_alloc new 不仅可以做内存开辟,还可以做内存初始化操作. int *p =
阅读全文
摘要:代码 #include <iostream> using namespace std; int sum(int a,int b){ int temp=0; temp= a +b; return temp; } int main(){ int a =10; int b=20; int ret =sum
阅读全文