
C和C++
Seven17000
与其临渊羡鱼,不如退而结网。
展开
-
什么是回调函数?回调函数的简单实现。
1.概念 在编写程序的时候,我们通常会在主函数中调用库里的各种函数,这个过程叫做调用,函数在调用的时候通常需要给函数传递一些必要的参数,函数的参数可以是很多的类型,而有的时候系统里的库函数要实现某种功能的时候,需要我们向库函数传递一个函数类型的参数,它才能实现所需达到的功能。这时候的库函数就调用了你编写的函数,这个过程就叫做回调。 这时被库函数调用的函数,也就是原创 2016-08-03 00:49:53 · 2609 阅读 · 0 评论 -
函数的重载与函数模板
函数重载:有时候想要实现几个功能相近,但只是处理的参数类型不同的函数,在C语言里我们要把这些函数起上不同的名字,而在C++里我们可以把这些函数都给上一个函数名只需要把不同的参数给入函数就可以了,这样大大的减少了函数名的数量,增强了代码的可读性。C++中这叫做函数的重载,是在同一作用域内声明几个功能类似的同名函数,但是这些函数必须是参数类型和数量必须不同。调用时,编译器会自动匹配参数最相符的函数,这样原创 2017-03-16 17:24:13 · 1384 阅读 · 0 评论 -
C++中的虚拟继承
概念 虚拟继承即将菱形继承中的公共基类设置为虚基类,从而解决从不同途径继承来的同名的数据成员在内存中有不同的拷贝造成数据冗余和二义性的问题。这个时候从不同的路径继承过来的同名数据成员在内存中就只有一个拷贝,函数名也只有一个映射。代码实现class Base{public: Base() { cout << "Base()" << endl; }原创 2016-11-16 09:47:46 · 668 阅读 · 0 评论 -
c++中的继承(二)
多继承一个子类有两个或以上直接父类时称这个继承关系为多继承,多继承可以看做是单继承的一种扩展。所谓多继承是指派生类具有多个基类,派生类与每个基类之间的关系仍可看做是一个单继承。多继承的格式如下:class A{};class B{};class C :public A, public B{};其中,派生类C具有两个基类(A和B),所以C的成员包含A和B中的成员原创 2016-11-15 16:28:56 · 385 阅读 · 0 评论 -
C++中的继承(一)
概念保持已有类的特性而构造新类的过程称为继承;在已有类的基础上新增自己的特性而产生新类的过程称为派生;被继承的已有类称为基类(或父类);派生出来的新类称为派生类(或子类)。继承是面向对象程序设计使代码可以复用的重要手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。示原创 2016-11-05 23:13:46 · 547 阅读 · 0 评论 -
C++中的this指针
this指针概念: this指针是一个常量指针,它存在于类的成员函数之中,它指向的被调用成员函数所实例化的对象。在成员函数内部,我们可以直接使用调用函数的对象的成员,而不用通过成员访问操作符来做到这一点,这就是因为this指针正指向该对象,任何对类成员的直接访问都被看做this的隐式访问。代码示例 Complex &operator=(/*Complex *const原创 2016-10-04 14:49:49 · 454 阅读 · 0 评论 -
C++中的析构函数
析构函数概念: 析构函数执行与构造函数相反的操作:构造函数初始化对象的非static的数据成员,析构函数则是释放对象所用的资源,并销毁对象的非static数据成员。特征: 析构函数的名字是由波浪线接类名构成,他没有返回值,也不接受参数,所以析构函数不能被重载。注意: 析构函数和构造函数相同,构造函数有一个函数体和初始化部分,析构函数原创 2016-10-02 14:33:09 · 837 阅读 · 0 评论 -
C++中的构造函数
构造函数概念:在每个类中都定义了它的对象被初始化的方式,类通过一个或者几个特殊的成员函数来控制其对象的初始化过 程,这些函数叫做构造函数。特征:构造函数的名字与类名字相同,构造函数没有返回类型,它有一个(可能为空的)参数列表和一个(可能为空 的)函数体。注意:构造函数不能被申明成const的。 一个类中可以包含多个构造原创 2016-10-01 20:44:54 · 582 阅读 · 0 评论 -
虚函数与纯虚函数
简介虚函数在C++中虚函数是实现多态的一种机制,核心理念就是通过基类访问派生类定义的函数。 最常见的例子就是如下class A{public: virtual void foo() { cout << "A::foo() is called" << endl; }};class B :public A{public: virtual vo原创 2017-05-09 20:14:22 · 368 阅读 · 0 评论 -
哈希桶的实现(拉链法)
简介为了解决线性探测实现哈希表时出现哈希冲突后导致数据堆聚的现象,我们采取了另一种结构来处理哈希冲突,哈希桶(拉链法),拉链法解决冲突的做法是将所有通过哈希函数计算出来的哈希地址相同的结点存放在一个单链表之中。 实现原理就是将哈希表定义为一个由N个头指针组成的指针数组,经过哈希函数计算得到的哈希地址相同的数据全部连在对于的头指针下面。它继承了数组的易于查找和链表便于删除插入的特点。时间复杂度拉链法原创 2017-03-16 11:10:54 · 4996 阅读 · 0 评论 -
如何使用一个for循环输出九九乘法表
问题引入很多人刚接触C语言的时候一定会遇到这样一个题目,在屏幕上输出九九乘法表。我相信大多数人的解法都会是使用两个for循环,两个变量,一个if判断语句用来判断什么时候换行。问题1:在屏幕上输出一个九九乘法表。代码int main(){ int i = 0; int j = 0; for (i = 1; i <= 9; i++) { for (j =原创 2017-03-08 17:45:06 · 34047 阅读 · 1 评论 -
一行代码判断闰年和计算某月份天数
在刚开始学习C++的时候,曾经封装过一个时间类,里面实现了一些接口,包括判断该年是否为闰年,计算某个月的天数,计算截止这个日期总共过了多少天等等。 可能很多人都C++初学者都写过这种东西,大多数人的写法可能和我最开始的时候写的一样,都是通过if,else语句和switch,case语句来进行判断,github上也有很多这种实现。代码判断闰年bool IsLeapYear(int _year) co原创 2017-03-08 20:46:12 · 6340 阅读 · 0 评论 -
B树的C++实现
简介和AVL树、RB树一样,B树也是一种搜索树结构,能够存储数据也可以对其进行排序。它的特点是结点可以有多余两个的子结点。但是他的优势在于处理大块数据的读写操作,因为在计算机中的存储体系当中,有一种叫做局部性的东西。他分为时间局部性和空间局部性。时间局部性:最近被访问的内存内容会很快再被访问; 空间局部性:靠近当前被访问内存的内存内容很快也会被访问。当在处理大块数据操作的时候B树的特性就可以减少定原创 2017-03-11 22:58:23 · 1137 阅读 · 0 评论 -
STL中的SET与MAP
SET.MAP的特性与区别 set与map一样都是属于STL里的关联式容器。 set,其包含了经过排序了的数据即键值(key),这些数据的值必须是唯一的。set所有的元素放入是无顺序的,在set中都会根据元素的键值自动排序。 map就是经过排序了的二元组的集合,map中的每个元素都是由两个值组成,键值(key)与实值(value),其中键值唯一原创 2017-02-16 14:20:45 · 610 阅读 · 0 评论 -
关于STL中string的拷贝问题
简介在不同版本的STL中string类实现拷贝的方式也是不一样的。大致分为三种方式 eager copy(贪婪拷贝):这种情况是最简单粗暴的拷贝方式,也就是每个对象都是相互独立的,每次拷贝都是深拷贝。这种拷贝方式的缺点就是浪费空间,但是保证了每个对象的独立互不干扰。SSO(small string optimization,小字符串直接放在对象的栈空间中):这种拷贝方式对小字符串的处理很高效,一般原创 2017-09-09 13:46:57 · 1488 阅读 · 0 评论