
c/c++
文章平均质量分 84
Sharp_UP
自信加努力造就成功!
展开
-
如何解决类模板的分离编译问题?
一模板:模板不是数据类型,只能算是一种行为集合的表示。编译器在使用模板时,通过更换模板参数来创建数据类型。这个过程就是模板实例化(Instantiation), 从模板类创建得到的类型称之为特例(specialization),说白了就是创建了一个新类型。 模板实例化取决于编译器能够找到可用代码来创建特例(称之为实例化要素,point of instantiation),也就是说,编译器不原创 2017-05-21 11:29:41 · 772 阅读 · 0 评论 -
C++多态相关关问题及虚表剖析
关于C++多态的问题:(基于Visual Studio 2012编译器) 一、多态引入1、对象的类型:(1) 静态的类型:对象声明时的类型,在编译的时候确定(2) 动态的类型:目前所指对象的类型,在程序运行时确定的EG:class Derived1:public Base{}; class Derived2:public Base{};原创 2016-11-14 12:35:25 · 586 阅读 · 0 评论 -
面试题:最常见最有可能考到的C语言面试题汇总
1. 用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题)#defineSECONDS_PER_YEAR (60 * 60 * 24 * 365)UL(无符号长整型) 2. 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。#defineMIN(A,B) ((A) 4. 嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢?这个问题原创 2017-08-17 17:03:54 · 30131 阅读 · 1 评论 -
有趣的C语言面试题
1、gets() 和 fgets()函数问题:找出下面代码的问题#include int main(void) { char buff[10]; memset(buff,0,sizeof(buff)); gets(buff); printf("\n The buffer entered is [%s]\n",buff); r原创 2017-08-10 16:07:31 · 508 阅读 · 0 评论 -
C/C++关键字解析
2、C/C++分别有多少个关键字? 假如别人问某一个关键字是否属于C/C++,要能正确的答出来。1)由ANSI标准定义的C语言关键字共32个 auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned co原创 2017-08-18 16:46:31 · 1061 阅读 · 0 评论 -
c++面试常考的知识点汇总
1. 链表和顺序表的优缺点,在什么场合下适合顺序表,什么场合下适合用链表。1)顺序表存储 原理:顺序表存储是将数据元素放到一块连续的内存存储空间,存取效率高,速度快。但是不可以动态增加长度 优点:存取速度高效,通过下标来直接存储,访问速度快,通过下标访问 缺点:a.插入和删除比较慢,b.不可以增长长度 比如:插入或者删除一个元素时,整个表需要遍历或移动元素来重新排一次原创 2017-08-18 16:45:42 · 1694 阅读 · 0 评论 -
C语言存储空间布局以及static解析
本文我将采用Linux环境测试C语言存储空间布局,以及采用VC6.0来测试static的常见用法。采用linux环境来测试c语言存储空间布局,是因为Linux很容易利用shell命令中的size命令查看到进程存储区各段的大小。采用VC6.0来测试static的常见用法,是因为我们利用VC6.0很容易创建一个工程,该工程可以包含很多源文件,这样就很方便我们测试本文件与其他文件之间的关系了。转载 2017-08-12 07:29:13 · 753 阅读 · 0 评论 -
微信红包问题:找出某个出现次数超过红包总数一半的红包的金额(面试题)
1、问题描述春节期间小明使用微信收到很多个红包,非常开心。在查看领取红包记录时发现,某个红包金额出现的次数超过了红包总数的一半。请帮小明找到该红包金额。写出具体算法思路和代码实现,要求算法尽可能高效。给定一个红包的金额数组gifts及它的大小n,请返回所求红包的金额。测试样例:[1,2,3,2,2],5返回:22、问题思路可以使用ma原创 2017-08-13 13:24:26 · 2186 阅读 · 0 评论 -
字符串替换:用参数字符数组成员替换字符串中的占位符(面试题)
1、问题描述:请你实现一个简单的字符串替换函数。原串中需要替换的占位符为"%s",请按照参数列表的顺序一一替换占位符。若参数列表的字符数大于占位符个数。则将剩下的参数字符添加到字符串的结尾。给定一个字符串A,同时给定它的长度n及参数字符数组arg和它的大小m,请返回替换后的字符串。保证参数个数大于等于占位符个数。保证原串由大小写英文字母组成,同时长度小于等于500。原创 2017-08-12 23:31:29 · 5008 阅读 · 0 评论 -
找出无序数组最小的K个数(基于快排,效率高)
#include <iostream>using namespace std;void swap(int *a, int *b){ int temp = *a; *a = *b; *b = temp;}void GetLeastNumbers_Solution(int input[],int start, int end, int k) { int原创 2017-10-04 00:30:06 · 1027 阅读 · 0 评论 -
求1到n ,这n个整数的二进制表示比特1的个数(时间复杂度:O(n))
题目描述:给定一个数字n,统计1~n之间的n个数字的二进制的1的个数int Nums_Of_Bit_1(int num) { int* number = new int[num]; int pow = 1,before =1;int count = 0; for(int i=1; i if (i == pow){原创 2017-10-28 00:43:48 · 1463 阅读 · 0 评论 -
C++动态绑定及返回类型协变
C++多态之动态绑定: 1、概念:在程序执行期间(非编译期)判断所引用对象的实际类型,根据其实际类型调用相应的方法。使用virtual关键字修饰类的成员函数时,指明该函数为虚函数,派生类需要重新实现,编译器将实现动态绑定。2、条件:a)必须是虚函数。 b)通过基类类型的引用或者指针调用虚函数。 class Base{public: Base原创 2016-11-16 18:01:43 · 4631 阅读 · 1 评论 -
malloc/free 和 new/delete的联系和区别
一、malloc/free 1、 函数原型:void* malloc(longNumBytes) 该函数分配了NumBytes个字节,并返回了只想这块空间的的指针。如果分配失败则返回空。函数原型:Void free(void *firstBytes)该函数是将之前用malloc分配的内存空间释放,还给操作系统。参数为只想那块空间的首地址。2、 内存操作:Mal原创 2017-04-06 21:20:50 · 886 阅读 · 0 评论 -
为什么析构函数可以能声明为虚函数,构造函数不可以
转自:http://blog.youkuaiyun.com/chen825919148/article/details/8020550构造函数不能声明为虚函数,析构函数可以声明为虚函数,而且有时是必须声明为虚函数。不建议在构造函数和析构函数里面调用虚函数。构造函数不能声明为虚函数的原因是:1 构造一个对象的时候,必须知道对象的实际类型,而虚函数行为是在运行期间确定实际类型的转载 2017-04-24 00:21:38 · 826 阅读 · 0 评论 -
如何防止头文件被重复包含或引用?
一、#pragma once ( 比较常用)只要在头文件的最开始加入这条指令就能够保证头文件被编译一次,这条指令实际上在VC6中就已经有了,但是考虑到兼容性并没有太多的使用。#pragmaonce是编译相关,就是说这个编译系统上能用,但在其他编译系统不一定可以,也就是说移植性差,不过现在基本上已经是每个编译器都有这个定义了。#pragmaonce这种方式,是微软编译器独有的,也是后来才原创 2017-05-14 14:14:59 · 29549 阅读 · 2 评论 -
条件变量
1、条件变量:条件变量是用来等待而不是用来上锁的。条件变量用来自动阻塞一个线程,直到某特殊情况发生为止。通常条件变量和互斥锁同时使用。条件变量使我们可以睡眠等待某种条件出现。条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待"条件变量的条件成立"而挂起。2、⼀一个线程可以调⽤用pthread_cond_wait在⼀一个Condition Variable上阻塞原创 2017-04-05 23:01:22 · 573 阅读 · 0 评论 -
C++模板剖析:函数模板、类模板解析
C++中关于模板&泛型编程问题: 问题引入:何编写一个通用加法函数? (1)使用函数重载,针对每个所需相同行为的不同类型重新实现它int Add(const int &_iLeft, const int&_iRight){return (_iLeft +_iRight);}float Add(const float &_fLeft, constfloat &_f原创 2016-11-29 21:36:55 · 2508 阅读 · 0 评论 -
C++调用约定
有一定C++开发经验的人一定对”__cdecl、__stdcall、__fastcall”肯定不陌生吧!但你真正理解了吗?是的,我曾在这采了无数个坑,栽了无数个跟头,终于忍无可忍要把它总结一下(虽然我已经有能力解决大部分这种问题了)!什么是调用约定 函数的调用约定,顾名思义就是对函数调用的一个约束和规定(规范),描述了函数参数是怎么传递和由谁清除堆栈的。它决定以下内容:(1)函数参数转载 2016-11-16 13:44:37 · 623 阅读 · 0 评论 -
C++ 继承解析
继承 1、概念:继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。一个新类从已有的类中获得其已有的特性称为继承,被继承的称为父类(Base class)或基类,新产生的类称为派生类或子类。原创 2016-11-08 10:42:14 · 799 阅读 · 0 评论 -
日期类Date
#include using namespace std;//日期是否合法//日期比较//两个日期中间差的天数//日期加上或减去一定的天数后的日期class Date{friend ostream& operatorfriend istream& operator>>(istream& _cin, Date& d);public:原创 2016-10-25 19:46:33 · 501 阅读 · 0 评论 -
复数类Complex
#include #include #include using namespace std;class Complex{friend ostream& operatorpublic:Complex(double r = 1.0, double i = 0.0): _real(r), _image(i){}Comple原创 2016-10-19 16:41:34 · 747 阅读 · 0 评论 -
类成员函数解析
1、 构造函数:(1) 定义:是一个特殊的成员函数,名字与类名相同,创建类类型对象时,由编译器自动调用,在对象的生命周期内只且只调用一次,以保证每个数据成员都有一个合适的初始值。(2) 特性:1、函数名与类名相同。2、没有返回值。3、有初始化列表(可以不用)。4、新对象被创建,由编译器自动调用,且在对象的生命期内仅调用一次。原创 2016-10-18 21:56:08 · 2098 阅读 · 0 评论 -
C++ this 指针
This 指针:this 是C++中的一个关键字,也是一个常量指针,指向当前对象(具体说是当前对象的首地址) 。通过 this,可以访问当前对象的成员变量和成员函数 。 Student Stu ; //通过Student类创建对象 StuStudent *pStu =&pStu ;假设this 指向对象 Stu , 则this 的值和 &pStu 相同 。 eg 1: 通原创 2016-10-11 22:13:12 · 731 阅读 · 0 评论 -
字符串处理函数
puts()函数:用来向标准输出设备(屏幕)写字符串并换行, 其调用格式为: puts(s); 其中s为字符串变量(字符串数组名或字符串指针),puts()函数的作用与语printf("%s\n", s)相同,将缓冲区的字符输出到标准输出,遇到空字符截至,并且在末尾添加一个换行符。。 gets():函数用来从标准输入设备(键盘)读取字符串直到回车结束, 但回车符不属于这个字符串。其调用原创 2016-07-23 16:47:49 · 682 阅读 · 0 评论 -
设计模式之单例模式(C++代码实现)
1、单例模式:单例模式:用来创建独一无二的,只能够有一个实例的对象。 单例模式的结构是设计模式中最简单的,但是想要完全实现一个线程安全的单例模式还是有很多陷阱的。2、应用场景:共享数据或者共享访问点; 创建一个对象需要消耗的资源过多,如访问IO和数据库等资源; 需要定义大量的静态常量和静态方法(工具类)单例模式的应用场景:有一些对象其实只需要一个,比如:windows Task Manager原创 2017-11-10 12:22:26 · 1411 阅读 · 0 评论