c++
ygmdream
为人处世!
展开
-
多重继承-构造函数与析构函数执行顺序
class Base{Base(int i){ } ~Base(){ }};class Derive:public Base{Derive::Derive(int i,int j,int k):Base(i),d(j),y (k){} ~Derive(){}};int main(){Derive obj(1,2,3);return 0;}说明:Deri原创 2014-05-09 13:33:13 · 1760 阅读 · 0 评论 -
引用和指针区别
将“引用”作为函数参数有哪些特点?(1)传递引用给函数与传递指针的效果是一样的。这时,被调函数的形参就成为原来主调函数中的实参变量或对象的一个别名来使用,所以在被调函数中对形参变量的操作就是对其相应的目标对象(在主调函数中)的操作。(2)使用引用传递函数的参数,在内存中并没有产生实参的副本,它是直接对实参操作;而使用一般变量传递函数的参数,当发生函数调用时,需要给形参分配存储单元,转载 2016-03-07 13:18:58 · 410 阅读 · 0 评论 -
类成员函数的重载、覆盖和隐藏区别?
34.类成员函数的重载、覆盖和隐藏区别?答案:a.成员函数被重载的特征:(1)相同的范围(在同一个类中);(2)函数名字相同;(3)参数不同;(4)virtual 关键字可有可无。b.覆盖是指派生类函数覆盖基类函数,特征是:(1)不同的范围(分别位于派生类与基类);(2)函数名字相同;(3)参数相同;(4)基类函数必须有virtual 关键字。c.“转载 2016-03-07 14:03:36 · 1475 阅读 · 0 评论 -
C++设计模式——单例模式
问题描述http://www.jellythink.com/archives/82现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能;在实际开发过程中,会专门有一个日志模块,负责写日志,由于在系统的任何地方,我们都有可能要调用日志模块中的函数,进行写日志。那么,如何构造一个日志模块的实例呢?难道,每次new一个日志模块实例,写完日志,再delete,不转载 2016-03-07 14:56:03 · 416 阅读 · 0 评论 -
c++工厂模式和c++工厂方法
问题描述之前讲到了C++设计模式——简单工厂模式,由于简单工厂模式的局限性,比如:工厂现在能生产ProductA、ProductB和ProductC三种产品了,此时,需要增加生产ProductD产品;那么,首先是不是需要在产品枚举类型中添加新的产品类型标识,然后,修改Factory类中的switch结构代码。是的,这种对代码的修改,对原有代码的改动量较大,易产生编码上的错误(虽然很简单转载 2016-03-07 15:27:07 · 4100 阅读 · 2 评论 -
选择排序
#include #include #include /*1:先假设第一个元素是最小的(期初 min_index=0), 遍历后面的如果存在比第一个更小的元素则改变min_index=更小的元素下标,一次遍历完事则得到min_index是最小元素的索引, 接着交互元素即把最小的元素放到第一个;2:再假设第二个元素是最小的(期初 min_index=1), 遍原创 2016-03-09 15:47:48 · 606 阅读 · 0 评论 -
N个降序数组,找到最大的K个数
N个降序数组,找到最大的K个数问题定义这个问题来自网上看到的百度算法题,感觉很不错,问题定义如下:假定有20个有序数组,每个数组有500个数字,降序排列,数字类型32位uint数值,现在需要取出这10000个数字中最大的500个,怎么做?解决方法这里其实有很多解决方法,笨拙的或者巧妙的。这里介绍一个非常不错的方法,使用最大堆堆排序:1. 建立大顶堆,转载 2016-03-09 09:37:08 · 759 阅读 · 0 评论 -
归并排序
http://www.cnblogs.com/bluestorm/archive/2012/09/06/2673138.html/** * Merge_Sort: 归并排序的递归实现 * 注:算法导论上给出的合并排序算法 * 递归过程是将待排序集合一分为二, * 直至排序集合就剩下一个元素为止,然后不断的合并两个排好序的数组 * T(n) = O(nlgn)**/#转载 2016-03-09 16:45:26 · 392 阅读 · 0 评论 -
Python多线程学习
http://www.cnblogs.com/tqsummer/archive/2011/01/25/1944771.html一、Python中的线程使用: Python中使用线程有两种方式:函数或者用类来包装线程对象。1、 函数式:调用thread模块中的start_new_thread()函数来产生新线程。如下例: import time import t转载 2016-03-10 10:34:05 · 491 阅读 · 0 评论 -
线程锁的概念函数EnterCriticalSection和LeaveCriticalSection的用法
线程锁的概念函数EnterCriticalSection和LeaveCriticalSection的用法注:使用结构CRITICAL_SECTION 需加入头文件#include “afxmt.h”定义一个全局的锁 CRITICAL_SECTION的实例和一个静态全局变量CRITICAL_SECTIONcs;//可以理解为锁定一个资源static int转载 2016-03-26 14:17:08 · 677 阅读 · 0 评论 -
windows计算程序运行时间
1. 这个是windows里面常用来计算程序运行时间的函数: 1: DWORD dwStart = GetTickCount(); 2: Test(); // Your program. 3: DWORD dwEnd = GetTickCount(); 4: DWORD dwTimes = dwEnd - dwStart;则(dwEnd-dwSt转载 2016-03-27 11:21:58 · 4312 阅读 · 0 评论 -
STL map与Boost unordered_map
参考:http://blog.csdn.net/orzlzro/article/details/7099231今天看到 boost::unordered_map, 它与 stl::map的区别就是,stl::map是按照operator,然后选择合适的位置插入到树中。所以,如果对map进行遍历(中序遍历)的话,输出的结果是有序的。顺序就是按照operator< 定义的大小排序。而b转载 2016-05-11 19:25:32 · 708 阅读 · 0 评论 -
boost bimap 学习笔记
http://blog.csdn.net/weiwangchao_/article/details/7290793bimap是boost中很重要的一个容器,可以进行双向的查找和替换,这样弥补了如果map和multimap需要找到data所对应的键值。循环遍历元素,才能找到相应的键值,再删除,最后替换的不足。但是boost的模板源编程又有着先天的缺点,就是编译错误不容易找到,编译转载 2016-05-11 19:29:04 · 2449 阅读 · 0 评论 -
【Boost】boost::array详解
大家都希望可以像操作STL容器一样的去操作数组,C++可没有提供这个东西,有时候你会选择使用vector来替代,不过这毕竟不是个好的办法,毕竟vector模拟动态数组比较稳妥,而用它去替代一个普通的数组,开销毕竟太大了。而恰好,boost::array就为你提供了这个功能。1. 这样的集合体有如下特点: (1)无用户声明的构造函数。(2)无私有的或保护的非静态数据成员。(3)无基转载 2016-05-11 19:47:36 · 4272 阅读 · 0 评论 -
C++11的新特性
最近学习了C++11的新特性,将学习内容整理下来以巩固记忆,C++11的新特性,可以分为两部分,第一部分是C++11核心语言的特性,第二部分是STL标准库的新特性。学习C++11主要参考了wiki上的一篇文章,在介绍右值引用的时候还参考了MSDN上一篇文章,由于这两篇文章写的时间比较早,和实际有些出入,我的开发环境是win8,vs2012,很多C++11特性还没支持,所以只整理了vs2012已经支转载 2016-05-12 11:20:34 · 591 阅读 · 0 评论 -
c语言 #define 中的UL
U和L是 整数文字量的后缀修饰,用于显示指明整数文字量的类型为unsigned int(U)和long int(L)。 类似的还有浮点数文字量的后缀修饰F或f,用于指明文字量表示的是一个float,而不是默认情况下的double。经常发现一些C语言中通过#define 定义的数据中包含有UL符号,不理解为什么,把他去掉发现也没有什么区别。现在才明白UL是标记该宏长整型 十进制 数据转载 2015-11-30 17:03:34 · 891 阅读 · 0 评论 -
C可变参数函数 实现
http://blog.csdn.net/weiwangchao_/article/details/4857567 C函数要在程序中用到以下这些宏:void va_start( va_list arg_ptr, prev_param ); type va_arg( va_list arg_ptr, type ); void va_end( va_list arg_pt转载 2014-11-27 10:59:12 · 582 阅读 · 0 评论 -
c语言输出文件名函数名和行号
在后台程序运行出问题时,详尽的日志是抓错不可缺少的帮手,这里提供一个能自动记录日志触发点文件名、行号、函数名的方法,关键是利用C99新增的预处理标识符__VA_ARGS__先介绍几个编译器内置的宏定义,这些宏定义不仅可以帮助我们完成跨平台的源码编写,灵活使用也可以巧妙地帮我们输出非常有用的调试信息。ANSI C标准中有几个标准预定义宏(也是常用的):__LINE__转载 2014-07-24 18:09:06 · 5771 阅读 · 0 评论 -
C++ 虚析构函数-(一个带有虚函数功能的类,则它需要一个虚析构函数)
#include using namespace std;class ClxBase{ public: ClxBase() {cout << "i am ClxBase! create" << endl;}; virtual ~ClxBase() {cout << "i am ClxBase! destroy" << endl;}; virtual void转载 2014-05-09 12:51:07 · 1248 阅读 · 0 评论 -
c++中try catch的用法
我们的异常处理类的features如何写一个异常处理类是一个不太容易的事情,最近刚好接触了一些不错的代码,看到了一些技巧,这里和大家分享一下。一个相对完善的异常处理类(以及附加的一些东西)应该能够处理下面的一些功能:1) 能够方便的定义异常类的继承树2) 能够方便的throw、catch,也就是在代码中捕获、处理代码的部分应该更短3) 能够获取异常出现的源文件的名字、方转载 2014-05-09 11:24:37 · 5348 阅读 · 0 评论 -
public继承---private继承---protected继承的区别
1, 公有继承(public)基类成员对其对象的可见性与一般类及其对象的可见性相同,public成员可见,protected和private成员不可见。基类成员对派生类的可见性对派生类来说,基类的public和protected成员可见:基类的public成员和protected成员作为派生类的成员时,它们都保持原有状态作为派生类的成员;基类的private成员依旧是private转载 2014-05-09 13:45:34 · 970 阅读 · 0 评论 -
C++ 类的静态成员详细讲解
在C++中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所有对象共用。所以在所有对象中都可以共享它。使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还可以节省内存。静态成员的定义或声明要加个关键static。静态成员可以通过双冒号来使用即::。 在C++中类的静态成员变量和静态成员函数是个容易出错的地方,本文先通过几个例子来总结静转载 2014-05-09 13:53:02 · 570 阅读 · 0 评论 -
c++中try catch的用法-1
来自库muduo:转载 2014-05-15 14:41:53 · 3950 阅读 · 0 评论 -
for_each循环操作
for_each(pos_begin,pos_end,func ) func可以是一个函数 也可以是一个对象#include #include using namespace std;void add10(int& element){ element +=10;}void print(int element){ cout << element << ' ';}cl转载 2014-05-09 14:09:12 · 590 阅读 · 0 评论 -
声明时候构造函数前加explicit -防止构造函数参数的隐式转换
按照默认规定,只有一个参数的构造函数也定义了一个隐式转换,将该构造函数对应数据类型的数据转换为该类对象,如下面所示:class String {String ( const char* p ); // 用C风格的字符串p作为初始化值//…}String s1 = “hello”; //OK 隐式转换,等价于String s1 = String(“hello”转载 2014-05-09 10:00:56 · 1906 阅读 · 0 评论 -
拷贝构造-赋值构造-深拷贝-浅拷贝
拷贝构造函数主要在以下三种情况下起初始化作用:1. 在声明语句中用一个对象初始化另一个对象;2. 将一个对象作为参数按值调用方式传递给另一个对象时生成对象副本;3. 生成一个临时对象作为函数的返回结果。那么接着就看一下在这三种情况下拷贝构造函数分别在什么时候调用,以及如果有临时对象的话,在什么时候析构。先假定有一个类FOO,在构造函数中会输出“Constructin转载 2014-05-09 13:29:05 · 663 阅读 · 0 评论 -
c++回调函数
CallbackProxy.h#ifndef __CALLBACK_PROXY_H__#define __CALLBACK_PROXY_H__ //Tobject:调用对象的类型,Tparam回调函数参数的类型 template class CCallbackProxy { //指向Tobject类型对象的成员函数指针,参数类型为Tparam* typed转载 2014-05-09 13:58:02 · 638 阅读 · 0 评论 -
C++纯虚函数
/*虚函数为了重载和多态的需要,在基类中是有定义的,即便定义是空,所以子类中可以重写也可以不写基类中的此函数!定义一个函数为虚函数,不代表函数为不被实现的函数。定义它为虚函数是为了用基类的指针指向不同的派生类的对象时,基类指针调用其虚成员函数,则会调用其真正指向对象的成员函数,而不是基类中定义的成员函数(只要派生类改写了该成员函数)。 */#include using转载 2014-05-09 09:29:31 · 779 阅读 · 0 评论 -
继承的时候,子类的拷贝构造函数和重载运算符的实现
#include using namespace std;class Parent{public: Parent(){cout<<"Parent constru fun()"<<endl;} Parent(int a):m_a(a){cout<<"Parent constru fun(int )"<<endl;} Parent(const Parent& other):m_a转载 2014-05-12 20:36:40 · 2691 阅读 · 0 评论 -
c++模板类学习
http://blog.csdn.net/hackbuteer1/article/details/6735704转载 2014-05-10 17:09:19 · 651 阅读 · 0 评论 -
C语言——十进制转为二进制、八进制、十六进制的函数转换
C语言——十进制转为二进制、八进制、十六进制的函数转换/**** Copyright(C) 2011, SKYCNC* All rights reserved** 程序名称:dec_to_bin_oct_hex* 功 能:输入一个十进制数,将其转化为二进制、八进制、十六进制** 作 者:zhanghbboy* 完成日期:11.07.27转载 2014-06-27 13:27:56 · 12173 阅读 · 0 评论 -
C++ 11 Lambda表达式
C++ 11中的Lambda表达式用于定义并创建匿名的函数对象,以简化编程工作。Lambda的语法形式如下: [函数对象参数] (操作符重载函数参数) mutable或exception声明 ->返回值类型 {函数体} 可以看到,Lambda主要分为五个部分:[函数对象参数]、(操作符重载函数参数)、mutable或exception声明、->返回值类型转载 2016-05-13 19:30:42 · 520 阅读 · 0 评论