
c/c++基础
c/c++基础知识点理解
优秀005
这个作者很懒,什么都没留下…
展开
-
c++多态
一个事物具有多种形态,在c++中指具有不同功能的函数可以用同一个函数名,这样据可用用一个函数名调用不同内容的函数,在面向对象方法中也可这样表述:向不同的对象发送同一个消息,不同的对象在接收时会发生不同的行为,即每个对象可以用自己的方法去响应共同的消息。二、类别:1、静态多态(静态绑定/早绑定/):对象声明时的类型,是在编译时确定的,在程序编译时系统就能决定调用那个函数,因此静态多态又称编译时原创 2017-04-08 13:40:22 · 502 阅读 · 0 评论 -
多态之虚表剖析1
对于有虚函数的类,编译器都会维护一张虚表,对象的前四个字节就是指向虚表的指针如下面代码:#include <iostream>using namespace std;class B{public: B() { _b = 10; cout << "this = " << this << endl; } virtual void t原创 2017-04-09 14:47:12 · 483 阅读 · 0 评论 -
从一个通用加法程序看模板
在以往如果我们要写一个通用的加法程序,以实现任意类型相加(比如:整形相加、字符型相加、双精度/单精度相加、整形加字符型、整形加双精度型......)我们可有以下几种方法:1、采用函数重载:针对每个所需相同行为的不同类型重新实现例如:int add(int left, int right)//整型相加{ return left + right;}double add原创 2017-04-16 17:19:57 · 778 阅读 · 0 评论 -
c++模板之萃取
假如,我们要设计一个_Copy的模板函数。我们为了提高效率采用memcpy,可以这样写:template<typename T>T* _Copy(T* dest, T* src, size_t n){ memcpy(dest, src, sizeof(T)*n); return dest;}我们知道一般的类型(比如int,float,double,char等)进原创 2017-05-04 11:28:36 · 1060 阅读 · 0 评论 -
智能指针发展
智能指针就是智能/自动化的管理指针所指向的动态资源的释放。并且可以向指针一样使用。1、早期auto_ptr—是一种失败的设计,有设计缺陷为了解决对象中指针的重复释放,采用管理权转移的方式。即在解决对象的赋值、拷贝构造时,比如:a = b;将a的地址空间释放,然后将b.ptr的指针赋给a.ptr,最后将地址空间的管理权交付于a.ptr,并将b.ptr致null。因此,在赋值过后,将不能使用原来指针,缺原创 2017-05-11 20:03:06 · 407 阅读 · 0 评论 -
小游戏之三子棋的实现
三子棋的具体实现方法和源代码。。。。。原创 2017-01-10 20:05:38 · 575 阅读 · 0 评论 -
小游戏之扫雷的实现
扫雷程序的c语言实现和思路解析,可拓展。。。。原创 2017-01-21 14:15:48 · 1377 阅读 · 0 评论 -
C语言小项目---注释转换
此项目可以将C语言的注释部分格式转换成c++的注释格式,代码其他的部分不变。即:思路:将C语言得到注释转换成c++的注释格式,我们可以定义一个文件指针从我们的源文件中逐次取字符与C语言的注释部分进行比较,然后将c语言的注释部分修改成c++的注释风格,其他代码字符不变,写入另一文件。接下来就是转换函数的设计了,很明显,在这个过程中要不断的进行状态之间的转化,因此,我们可以定义原创 2017-02-27 22:23:25 · 498 阅读 · 0 评论 -
数据结构之单链表基本功能的实现
单链表的创建,尾插,头插,逆置,删除,销毁等功能原创 2017-02-28 16:42:15 · 1196 阅读 · 0 评论 -
C语言实现通讯录(静态版)
利用c语言结构体、指针、函数等知识实现一个通讯录,具有基本增删改插等功能:原创 2017-03-01 22:18:48 · 897 阅读 · 0 评论 -
栈的模拟实现
#include using namespace std;#includetemplateclass Stack{public: Stack() :_arr(NULL) ,_size(0) , _capacity(0) {} void Push(const T& x) { _checkcapacity(); _arr[_size] = x; _size原创 2017-05-23 20:44:22 · 510 阅读 · 0 评论 -
队列和栈相关面试题总结
1、实现一个栈,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)??分析: 出栈和入栈根据栈自身提供的接口不难实现,而返回最小值,我们知道遍历一次栈即可找到最小值,但是对栈的操作只能在栈顶,因此,要遍历势必要改变栈的状态,而且还要求时间复杂度为O(1),即更不能遍历栈。我们可以利用两个栈同时进行操作,一个是我们放数据的栈,而另一个栈顶专门放原创 2017-05-23 23:49:51 · 612 阅读 · 0 评论 -
模拟实现队列
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。模拟代码:#include using namespace std;#include templatestruct QueueNode{ T _Data;原创 2017-05-24 11:09:25 · 755 阅读 · 0 评论 -
浅析this指针(c++)
this指针理解,类的存储方式。。。。。。原创 2017-03-13 15:43:21 · 547 阅读 · 0 评论 -
Date日期类的实现
用c++实现一个日期类,可实现: 1.日期加或减一个天数,之后的日期; 2.两个日期之间差多少天; 3.对日期进行++(后置) 或 – (后置) 操作; 4.对日期进行++(前置) 或 – (前置) 操作;。。。。。。原创 2017-03-28 13:35:05 · 953 阅读 · 1 评论 -
浅拷贝、深拷贝与引用计数
用模拟实现string来分析浅拷贝、深拷贝、引用计数。。。。。。。。原创 2017-04-04 16:04:18 · 661 阅读 · 0 评论 -
c++继承初识
简单介绍如何理解继承,及继承中相关概念原创 2017-04-06 18:06:43 · 674 阅读 · 0 评论 -
c++之虚函数
在同一类中不能定义两个名字相同、参数个数和类型都相同的函数,否则,将会重复定义;但是在类的继承层次中可以出现名字相同,参数列表相同而功能不同的函数,这是合法的,因为他们不在一个类中,但是,如果直接调编译系统将会按照同名覆盖的原则决定所调用的函数。例如:class B{public: void test() { cout << "B::test()" << endl原创 2017-04-08 12:41:50 · 1008 阅读 · 0 评论 -
虚拟继承剖析
在现实生活中,一个对象经常不止继承一个事物的属性,在类的继承体系中也同样如此,这样就不得不采用多重继承,C++允许为一个派生类指定多个基类,这样的继承结构被称做多重继承。但是由于多重继承时,在派生类中访问基类成员路径不明确,而经常出现程序出错,为了解决这种错误,我们除了可以加作用域限定符来明确路径外,c++也提供采用虚拟继承来解决此问题。。这里我们用菱形继承为例,先不用虚拟继承,如下面代码,假如我们原创 2017-04-18 18:03:28 · 570 阅读 · 0 评论 -
多态之虚表剖析2
在一个既有虚继承又有虚函数的继承体系里,它的内存布局对象模型是怎么样的呢??以菱形虚拟继承为例:1、没有覆盖如下代码:#include <iostream>using namespace std;class B{public: virtual void funtest1() { cout << "B::funtest1()" << endl; }原创 2017-04-19 12:49:14 · 500 阅读 · 0 评论 -
模板实现顺序表
模板实现c++顺序表,实现基本功能:源代码及测试:#include #include using namespace std;template class SeqList{public: SeqList() :_arr(NULL) , _size(0) , _capacity(0) {} SeqList(const SeqList& seq)//拷贝构造原创 2017-04-22 11:02:46 · 504 阅读 · 0 评论 -
模板实现双向链表
c++模板实现双向链表:#include <iostream>using namespace std;template<typename T>struct ListNode { T _data; ListNode<T>* _prev; ListNode<T>* _next;};template<typename T>class List{ typedef原创 2017-04-23 08:46:10 · 637 阅读 · 0 评论 -
模板的分离编译
有下面两代码:1、普通类函数:我们把类的声明和定义分开:array.h:#pragma once#include <iostream>using namespace std;class ArrayNonT{public: ArrayNonT();//构造函数 void PushBack(int x);protected: int _a[100]; size_t _原创 2017-04-23 21:06:22 · 601 阅读 · 0 评论 -
如何用c语言寻找十进制数二进制的奇数位.偶数位.任意位
十进制与二进制的转化,寻找二进制的奇数位,偶数位,任意位。原创 2016-11-15 12:41:39 · 2297 阅读 · 0 评论 -
c语言求一元二次方程的根
对于一个一元二次方程进行如下分析: ax^2+bx+c=0分析:1. 当a = 0: 结论:不是一个一元二次方程;2. 当a!=0: 结论:(1)当b^2-4ac=0,方程有两个相等的实根,x1=x2=-b/2a; (2)当b^2-4...原创 2016-11-15 20:42:08 · 34336 阅读 · 5 评论 -
c语言之产生随机数详解
C语言产生随机数,原理,代码方法各种原创 2016-11-18 15:26:02 · 1617 阅读 · 3 评论 -
二进制数中1的个数(谷歌面试题)
求二进制中1的个数?(条件:在使用循环时二进制中有几个1循环几次)原创 2016-11-27 23:23:07 · 775 阅读 · 2 评论 -
strlen函数的几种实现方法
strlen函数的几种实现,面试。。。。原创 2017-01-27 20:21:27 · 4176 阅读 · 0 评论 -
浅析程序的编译过程
认识程序的编译执行过程是学习编程的开端!只有能够深入了解程序的运行机制,了解编译过程,清楚在这个过程中编译器做了什么事,才能在程序出现错误时游刃有余的解决。 总的来说,一个C语言程序的运行包括四个过程:预处理、编译、汇编和链接。在这,我用liunx中使用gcc来编译“hello world”程序做一演示,理解编译的原理。在liunx的终端中使用vim编辑器,建立一个...原创 2017-01-28 12:52:27 · 1378 阅读 · 0 评论 -
解析大小端及其判断
计算机内存大小端的原理详解,大小端的判断方法。。。原创 2017-03-20 22:36:25 · 789 阅读 · 0 评论