C++
胡思先生
这个作者很懒,什么都没留下…
展开
-
C++第四天:类和对象,六个成员函数,const类型
C++从开始到放弃第三天1.类的六个成员函数当类中一个成员都没有的时候,简称为空类。空类中会自动生成六个成员函数。1.构造函数:负责初始化2.析构函数:负责释放,清理工作3.拷贝构造:对创建对象的拷贝4.赋值重载:把一个对象赋值给另一个对象5.普通对象取地址重载6.const对象取地址重载2.构造函数定义:构造函数是一个特殊的成员函数,名字与类名相同,创建类时由编译器自动调用...原创 2019-01-17 16:02:38 · 177 阅读 · 0 评论 -
归并排序
归并排序思想将已有的数组依次拆分到不可拆分为止,再使得每个子序列有序,再使子序列段有序,最终将子序列段组合成为有序的数组。核心步骤代码实现:void _MergeSort(int* a, int begin, int end, int* tmp){ if (begin >= end)//设置递归返回条件 return; int mid = begin + ((end -...原创 2019-03-16 11:47:06 · 84 阅读 · 0 评论 -
选择排序:三种构建方法和非递归写法
选择排序思想将排序序列中的某元素作为基本值,按照该基本值将排序组合分成两个子序列,左子序列均小于基准值,右子序列均大于基准值,然后左右序列重复这个操作,直到数组有序为止。确定基本值//根据左值,右值,中值判断哪个位置的值为第二大的数,返回这个位置,将其作为基本数int RealKey(int* a, int begin, int end){ int mid = begin + ...原创 2019-03-16 12:38:55 · 205 阅读 · 0 评论 -
C++第九天: 继承(定义,隐藏,切片,作用域,六个默认成员函数,多继承,菱形继承原理等)
继承1.概念及定义:1.1概念继承机制是面对对象程序设计使代码可以复用的手段,它允许程序员在保持原有类特性的基础上进行拓展,增加功能,形成新的类,这样产生的类,被称为派生类。继承呈现了面对对象程序设计的层次结构,体现了简单到复杂的认知程度。1.2 定义菱形继承的原理:代码实现:class A{public: int _a;};class B : public A{pub...原创 2019-03-24 21:43:00 · 204 阅读 · 0 评论 -
C++第十天:多态(定义,抽象类,原理,常见面试题)
1.多态概念多态:完成某个行为,当不同的对象去完成时会产生出不同的状态。例子:不同的人去火车站买票,有的人买的是成人票,有的人买的是学生票,这就是多态的行为。2 多态的定义条件:1.调用函数的对象必须是指针或者引用2.被调用的函数必须是虚函数,且完成了虚函数的重写什么是虚函数?虚函数:就是在类的成员函数前面加virtualclass Person{public: virtu...原创 2019-03-26 10:14:20 · 372 阅读 · 0 评论 -
C++第十一天:异常(传统处理方式,异常处理方式,异常地使用异常的规范,异常的优缺点)
1.C语言传统的处理错误的方式:1.终止程序,如常见的assert,缺陷:用户难以接受 。 除0错误,内存错误时程序直接退出2.返回错误码,缺陷。 需要程序员自己去查找对应的错误。如程序的很多库的接口函数都是通过把错误码放到errono中,表示错误。2.C++对异常的处理异常是一种处理错误的方法。当一个函数发现自己有无法处理的错误就开始抛异常,让函数直接或者间接的调用者处理这个函数。t...原创 2019-03-30 21:21:20 · 558 阅读 · 0 评论 -
C++第十二天:智能指针(shared_ptr, unique_ptr,auto_ptr 明理和模拟实现)
1.智能指针的使用及其原理1.1 RAIIRAII(Resource Acquisition Is Initialization)是一种利用对象生命周期来控制程序资源的简单技术在对象构造的时候获取资源,接着控制对资源的访问使之在对象的生命周期期间内始终保持有效,最后在对象析构的时候释放资源。这么做有两个好处1.不需要显示地释放内存2.采用这种方式,对象所需的资源在生命周期内始终保持有效...原创 2019-03-31 14:35:43 · 385 阅读 · 0 评论 -
重载,重定义,重写的区别
思维导图例子:class Person{private: virtual void id() { cout << "id()" << endl; } void name() { cout << "name" << endl; }public: void all() { id(); name(); } ...原创 2019-05-16 12:53:17 · 528 阅读 · 0 评论 -
C++多态
思维导图什么是多态?多态,从字面意思上理解就是多种形态,多种形式。在C++这种面对对象的语言中,就是“一个接口,多种实现”。多态分为静态多态和动态多态。怎么区分静态多态和动态多态?区别:在什么时候将函数实现和函数调用关联起来,是在编译时期还是运行时期,即函数地址是早绑定还是晚绑定。静态多态:指在编译期间就可以确定函数的调用地址,并生产代码,这就是静态的,也就是地址是早早绑定的,静态...原创 2019-05-18 15:14:33 · 293 阅读 · 0 评论 -
虚函数,纯虚函数,普通函数的区别
原创 2019-05-18 15:15:35 · 248 阅读 · 0 评论 -
计数排序:非比较排序
计数排序1.统计相同元素出现的个数 2.根据统计结果将序列回收到原来的序列中整体思路如下图:void CountSort(int* a3, int n){ int min = 0; int max = 0; int i = 0; while (i &lt; n)//记录最大最小值 { if (min &gt; a3[i]) { min = a3[i]; } ...原创 2019-03-14 13:16:17 · 141 阅读 · 0 评论 -
直接插入排序:简单的插入排序
直接插入排序当出入第i个元素的时候,前面的a[0], a[1]...a[i - 1]已经排好序了,此时用a[i]的排序码与之前的排序码顺序进行比较,好到适合插位置将array[i]插入,如下图:实现代码如下:void InsertSort(int* a, int n){ for (int i = 0; i &lt; n - 1; i++) { int cur = i + 1;//...原创 2019-03-14 12:50:55 · 786 阅读 · 0 评论 -
深拷贝和浅拷贝的理解
下面是浅拷贝的实例:class String{public: String(const char* str = "") { if (str == nullptr) { assert(false); return ; } _str = new char[strlen(str + 1)]; strcpy(_str, str); } ~String() ...原创 2019-02-25 20:58:37 · 483 阅读 · 0 评论 -
Date(日期类):各种接口的实现
问题class Date {public: Date(int year = 1900, int month = 1, int day = 1);//构造函数 Date(const Date& d);//拷贝函数 Date& operator=(const Date& d);//赋值 Date operator+(int days);// 从当前日期 +...原创 2019-01-17 19:13:23 · 1166 阅读 · 0 评论 -
C语言第五天:构造函数初始化,友元,static,内部类
C语言从开始到放弃第五天:1.构造函数初始化构造函数体赋值在构造对象时,编译器会通过构造函数,给成员对象赋上初始值。Date(int year, int month int day) { _year = year; _month = month; _day = day; }但是构造函数体中的语句仅仅能被称为赋值,不能称为初始化。初始化可以多次赋值,但只能初始化一次构造...原创 2019-01-18 16:38:36 · 324 阅读 · 0 评论 -
C++的第一天:命名,输入输出,函数重载和引用
C++从开始到放弃(第一天)1.命名空间创建命名空间1.普通命名空间namespace N1//以N1为命名空间名称{ int a = 10;}2.设计嵌套空间namespace N2//设计嵌套空间{ int a = 1; int b = 2; namespace N3 { int c = 3; int b = 4; }}同一个工程中允许存在多个相...原创 2019-01-14 23:49:39 · 232 阅读 · 0 评论 -
C++第六天:内存管理 new,delete和malloc,free的区别
C++从开始到放弃第六天C和C++的内存分布:1.栈:非静态变量局部变量,函数参数,返回值等等,栈是向下增长的。2.内存映射是高效的映射方式。3.堆用于程序运行时动态内存分配,堆是向上增长的。4.数据段,存储全局和静态数据5.代码段,可执行的代码或者常量。2.C++内存管理方式通过new和delete操作符进行动态内存管理void Test(){ //动态申请一个int空间...原创 2019-01-20 15:34:56 · 220 阅读 · 0 评论 -
C++第七天:模板的初步认识:函数模板,类模板
C++从开始到放弃第七天1.泛式编程使用函数重载会有几个缺陷:1.重载的函数仅仅只是类型不同,代码的复用率较低,只要有新的类型出现,就需要增加对应的函数。2.代码的可维护性低,一个出错可能所有的重载都出错。泛式编程:编写与类型无关的通用代码。2.函数模型template&lt;typename T1, typename T2,…,typename Tn&gt;返回值类型 函数名(参...原创 2019-01-20 16:27:02 · 107 阅读 · 0 评论 -
C++第八天:string类
string类的常用接口:string() 构造空函数string(const char* s) 用c——string来构造string类string(size_t n , char c) string类对象包含N个Cstring(const string &amp;s) 拷贝构造string(const string&amp; s, size_t n) 用s的前N个构造新的n ...原创 2019-01-21 17:25:53 · 125 阅读 · 0 评论 -
C++第二天:内联函数,auto,for,nulltr
C++:从开始到放弃第二天1.内联函数概念:以inline修饰的函数叫做内联函数。下面是没有加Inline的时候,机器运行时的编程代码。进行了压栈操作,导致系统开销加大,花费了更多的时间。下面是加了inline的编程代码。可以看到,用inline修饰的内联函数,在编译时会在调用的内联函数地方展开,没有压栈的开销。以空间为代价,提高了效率。特性:1.inline函数是一种以空间...原创 2019-01-16 15:17:19 · 234 阅读 · 0 评论 -
C++第三天:类与对象的初步认识,this指针
C++从开始到放弃第三天。1.初步认识C语言主要面向对象,关注的是过程,分析出求解的问题的步骤,通过函数调用逐步完成。C++是基于面向对象的,关注的是对象,讲一件事情拆分为不同的对象,考对象之间的关系完成。2.类的引入C++中,结构体不仅可以定义变量,也可以定义函数。3.类的定义class Date{ //类体:由成员函数和成员变量构成。};//记得加分号class为定义的...原创 2019-01-16 16:39:21 · 139 阅读 · 0 评论 -
C/C++程序的内存分配
思维导图内存空间布局图C/C++编译的程序占用内存分为一下几个部分栈区:由编译器自动分配与释放,存放着运行时函数分配的局部变量,函数参数,返回数据,返回地址。其操作类似于数据结构中的栈堆区:一般由程序员移动分配,如果程序员没有释放,程序结束有OS回收。其分配类似于链表。全局区:存放全局变量,静态数据,常量。程序结束后由系统释放。全局区分为初始化全局区和未初始化全局区。常量区:存放...原创 2019-09-09 18:05:10 · 260 阅读 · 1 评论