随笔分类 -  C/C++

摘要:转载:http://feihu.me/blog/2014/the-origin-and-usage-of-typename/#typename 侯捷在Effective C++的中文版译序中提到: C++的难学,还在于它提供了四种不同(但相辅相成)的程序设计思维模式:procedural-based 阅读全文
posted @ 2016-08-12 21:47 执迷不悟~ 阅读(396) 评论(0) 推荐(0)
摘要:在C++中,explicit关键字主要用于防止隐式转换,用于修饰构造函数、复制构造函数。 例如有一个类: 1、 A a = 0; 首先编译器( compiler )认为这样写是不符合规矩的,因为 A = A才是正常行为但是它不放弃,通过搜索发现A可以根据一个int构造,同时这个A( int coun 阅读全文
posted @ 2014-04-30 21:30 执迷不悟~ 阅读(326) 评论(0) 推荐(0)
摘要:声明( declaration )是告诉编译器某个东西的名称和类型( type ),但略去细节。 下面是声明的例子: 定义( definition )是提供编译器一些声明所遗留的细节。 对对象( object )而言,定义是编译器为此对象分配内存。 对函数( function ) 或 函数模版( f 阅读全文
posted @ 2014-04-30 17:13 执迷不悟~ 阅读(344) 评论(0) 推荐(0)
摘要:多态是指通过单一的标识支持不同的特定行为的能力。C++中有两种多态,称为动多态(运行期多态)和静多态(编译期多态),而静多态主要通过模板来实现,宏也是实现静多态的一种途径。动多态在C++中是通过虚函数实现的,即在基类中存在一些接口(一般为纯虚函数),子类必须重载这些接口。这样通过使用基类的指针或者引... 阅读全文
posted @ 2014-04-16 21:22 执迷不悟~ 阅读(3685) 评论(0) 推荐(0)
摘要:模版特化:任何针对模版参数进一步进行条件限制设计的特化版本。 >完全特化:针对所有的模版参数进行特化。 >举例如下: template class Template{}; 全特化:template class Template{};偏特化:template class Template{};注意:函数模版不存在偏特化,只有类模版才能偏特化#include using namespace std;templateclass Test{public: Test( T i, N j ) : a(i), b(j) { coutclass Test{public: Tes... 阅读全文
posted @ 2014-04-11 21:00 执迷不悟~ 阅读(6283) 评论(0) 推荐(2)
摘要:首先我们区分下几个容易混淆的关键词: new、operator new、placement newnew和delete操作符我们应该都用过,它们是对堆中的内存进行申请和释放,而这两个都是不能被重载的。要实现不同的内存分配行为,需要重载operator new,而不是new和delete。operator new(1) 只分配所要求的空间,不调用相关对象的构造函数。当无法满足所要求分配的空间时,则 ->如果有new_handler,则调用new_handler,否则 ->如果没要求不抛出异常(以nothrow参数表达),则执行bad_alloc异常,否则 -... 阅读全文
posted @ 2014-03-25 20:49 执迷不悟~ 阅读(699) 评论(0) 推荐(0)
摘要:Increments an iterator by a specified number of positions.template void advance( InputIterator& _InIt, Distance _Off );std::list m_list... 阅读全文
posted @ 2013-11-26 15:56 执迷不悟~ 阅读(598) 评论(0) 推荐(0)
摘要:友元提供了不同类的成员函数之间、类的成员函数与一般函数之间进行数据共享的机制。通过友元,一个不同函数或另一个类中的成员函数可以访问类中的私有成员和保护成员。c++中的友元为封装隐藏这堵不透明的墙开了一个小孔,外界可以通过这个小孔窥视内部的秘密。友元的正确使用能提高程序的运行效率,但同时也破坏了类的封装性和数据的隐藏性,导致程序可维护性变差。友元函数 :友元函数是可以直接访问类的私有成员的非成员函数。它是定义在类外的普通函数,它不属于任何类,但需要在类的定义中加以声明,声明时只需在友元的名称前加上关键字friend,其格式如下:friend 类型 函数名(形式参数); 友元函数的声明可以放在类的 阅读全文
posted @ 2013-11-19 20:09 执迷不悟~ 阅读(31933) 评论(0) 推荐(7)
摘要:在编写C++程序的时候,偶尔需要用到前置声明(Forward declaration)。下面的程序中,带注释的那行就是类B的前置说明。这是必须的,因为类A中用到了类B,而类B的声明出现在类A的后面。如果没有类B的前置说明,下面的程序将不同通过编译,编译器将会给出类似“缺少类型说明符”这样的出错提示。代码一:// ForwardDeclaration.h#include using namespace std;class B; // 这是前置声明(Forward declaration)class A{private: B* b;public: ... 阅读全文
posted @ 2013-08-07 20:54 执迷不悟~ 阅读(6591) 评论(3) 推荐(1)
摘要:一直对这四种转换类型都没好好的研究过,用得最多的还是C的强制转换(TYPE)m_obj; C++有四种类型转换:1.static_cast用法:static_cast ( expression )该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。①用于类层次结构中基类(父类)和派生类(子类)之间指针或引用的转换。进行上行转换(把派生类的指针或引用转换成基类表示)是安全的;进行下行转换(把基类指针或引用转换成派生类表示)时,由于没有动态类型检查,所以是不安全的。②用于基本数据类型之间的转换,如把int转换成char,把int转换成enum。这种转换. 阅读全文
posted @ 2013-03-29 18:03 执迷不悟~ 阅读(277) 评论(0) 推荐(0)
摘要:Unicode的出现是为了适应软件国际化的需要。Unicode不同于双字节字符集(DBCS)。 一、相关操作函数 1、DBCS使用下面的函数操作字符串: CharNext——获得后一个字符CharPrev——获得前一个字符IsDBCSLeadByte——判断是否为两个字节字符的第一个字节... 阅读全文
posted @ 2013-03-20 12:39 执迷不悟~ 阅读(807) 评论(0) 推荐(0)
摘要:变长参数的函数即参数个数可变、参数类型不定 的函数。设计一个参数个数可变、参数类型不定的函数是可能的,最常见的例子是printf函数、scanf函数和高级语言的Format函数。在C/C++中,为了通知编译器函数的参数个数和类型可变(即是不定的、未知的),就必须以三个点结束该函数的声明。// pri... 阅读全文
posted @ 2013-03-20 12:14 执迷不悟~ 阅读(484) 评论(0) 推荐(0)
摘要:// 有些成员变量的数据类型比较特别,它们的初始化方式也和普通数据类型的成员变量有所不同。这些特殊的类型的成员变量包括: // a. 常量型成员变量 如:const int i;// b. 引用型成员变量 如:int &i;// c. 静态成员变量 如:static int i;// d. 整型静态常量成员变量 如:static const int i;// e. 非整型静态常量成员变量 如:static const double i;// // 对于常量型成员变量和引用型成员变量的初始化,必须通过构造函数初始化列表的方式进行... 阅读全文
posted @ 2013-03-19 12:13 执迷不悟~ 阅读(1003) 评论(0) 推荐(2)
摘要:数组中每个元素都具有相同的数据类型,数组元素的类型就是数组的基类型。如果一个数组中的每个元素均为指针类型,即由指针变量构成的数组,这种数组成为指针数组,它是指针的集合。指针数组的的形式为:类型* 数组名[常量表达式]int *p[3]; //声明了一个数组,数组名为p,数组里面的元素为int*(存放int变量的地址)数组指针的形式为:类型 (*数组名)[常量表达式] int (*p)[4] ; //p是一个指针,是一个指向数组的指针,也是二维数组的行指针(4代表的是二维数组的列) int (*p)[4]; // 定义了一个指针p,指向一个4个元素的数组。只是定义一个指针,指向4个元素的数... 阅读全文
posted @ 2013-03-15 17:11 执迷不悟~ 阅读(264) 评论(0) 推荐(0)
摘要:冒泡排序是非常容易理解和实现,,以从小到大排序举例:设数组长度为N。1.比较相邻的前后二个数据,如果前面数据大于后面的数据,就将二个数据交换。2.这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置。3.N=N-1,如果N不为0就重复前面二步,否则排序完成。按照定义很容易写出代码://冒泡排序1void BubbleSort1(int a[], int n){ int i, j; for (i = 0; i < n; i++) for (j = 1; j < n - i; j++) ... 阅读全文
posted @ 2013-03-08 18:36 执迷不悟~ 阅读(256) 评论(0) 推荐(0)