C++
文章平均质量分 72
whz_zb
这个作者很懒,什么都没留下…
展开
-
位域 (类似于结构体)
位域 有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域, 并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样转载 2012-05-20 00:01:55 · 934 阅读 · 0 评论 -
基本编程语句的效率特性
基本编程语句的效率特性一、选择语句的效率特性1、 充分考虑if语句中逻辑表达式的执行效率if中的逻辑表达式的运算遵循一下两个原则:1、表达式从左到右求值。2、当确定结果后,将不再进行计算。对于逻辑(&&)与而言,当出现表达式为假时停止运算;对于逻辑或(||)而言,当出现表达式为真时停止以后的运算。例子://不充分逻辑与 char str[] = "he转载 2012-04-03 23:40:04 · 1106 阅读 · 0 评论 -
algorithm里面有个next_permutation
原文来自: http://www.cppblog.com/yindf/archive/2010/02/24/108312.htmlnext_permutation, next, next, next...了解C++的童鞋都知道algorithm里面有个next_permutation可以求下一个排列数,通过《STL 源码剖析》(或者自己读代码)可以知道其实现,比如:abcd转载 2012-04-01 21:30:28 · 655 阅读 · 0 评论 -
内存池技术
看到一篇关于内存池技术的介绍文章,受益匪浅,转贴至此。 原贴地址:http://www.ibm.com/developerworks/cn/linux/l-cn-ppp/index6.html6.1 自定义内存池性能优化的原理书名:《C++应用程序性能优化》 作者:冯宏华、徐莹、程远、汪磊 等编著 出版社:电子工业出版社 出版转载 2011-11-19 14:22:19 · 3771 阅读 · 0 评论 -
C++ 点滴积累(5)
1. 函 数 模 板10.1 函数模板定义有时候强类型语言对于实现相对简单的函数似乎是个障碍例如虽然下面的函数min()的算法很简单但是强类型语言要求我们为所有希望比较的类型都实现一个实例int min( int a, int b ) {return a }double min( double a, double b ) {return a }有一种方法可替代这原创 2011-11-17 19:39:04 · 809 阅读 · 0 评论 -
C++ :: 的用法小结
:: 的用法小结:用于将类内声明的静态数据成员在类外初始化;用于将类内声明的函数成员在类外实现;用于捞出继承时访问权限被改变的成员,使之还原为原来的权限;继承时派生类新增了与基类同名的成员,由于同名屏蔽,从而使基类的成员被遮蔽,可用: :将被遮蔽的基类成员重见天日;用于在类外或子类中访问不继承的静态成员;用于区分不同名空间的标识符。:: 的作用之一:恢复访问原创 2011-10-04 00:46:42 · 31067 阅读 · 4 评论 -
C++ 指针(任何一个指针本身的类型都是unsigned long int型)
1.指针数组: 即 数组的元素是指针型;例:int*pa[2];明明是一维的指针数组,竟当作二维数组用。//利用指针数组存放单位矩阵#include using namespace std;void main(){ int line1[]={1,0,0}; //声明数组,矩阵的第一行 int line2[]={0,1,0}; //声明数组,矩阵的第二行 int line3原创 2011-10-03 16:32:19 · 8900 阅读 · 2 评论 -
C++ 点滴积累(3)
1.析构函数的调用时机:1)} 或 文件尾2)delete(有条件的)3)catch()当中途退出程序时(exit()、abort() )不调用析构函数2.在函数内部定义的类叫内部类,内部类的成员函数只能是内联函数。3.静态成员(类属性)静态数据成员–用关键字static声明;–该类的所有对象维护着同一份拷贝;–不能在构造函数中初始化,应在类外单原创 2011-10-22 21:45:45 · 773 阅读 · 0 评论 -
C++ 点滴积累(4)
1. 数组作形参声明:在C/C++中,数组参数永远不会按值传递,它是传递第一个元素(准确地说是第0个)的地址,就是说形参不会复制数组。- 例如:void putValues(int[10]);- 被编译器视为:void putValues(int *);- 数组的长度与参数声明无关,因此,下列三个声明是等价的: void putValues(int *); void原创 2011-10-22 23:45:46 · 1200 阅读 · 0 评论 -
C/C++中类的存储方式
一、简单对象的存储1、 基本类型对齐原则:Char 1Short 2Int 4Long 4Float 4Double 82、 结构体类型对齐原则:以最大成员类型的对齐方式为准,即当需要增长时,增长最大成员类型所占用的字节数。3、转载 2012-04-03 23:37:44 · 1139 阅读 · 0 评论 -
C++ Primer学习笔记
http://blogold.chinaunix.net/u/18517/showart_241158.html转载 2012-04-08 17:01:06 · 873 阅读 · 0 评论 -
C++ STL 学习笔记
http://blog.csdn.net/morewindows/article/details/6946811转载 2012-04-08 17:13:16 · 854 阅读 · 0 评论 -
返回内部成员变量的指针
1. 不好的方法:先看代码#include #include using namespace std;const int CONTEXT_SZ=255;class Test{public: Test() { } ~Test() { } char *getContext(); int setContext(const char *str);pr原创 2012-05-19 18:13:23 · 2032 阅读 · 0 评论 -
typeid详解
在揭开typeid神秘面纱之前,我们先来了解一下RTTI(Run-Time Type Identification,运行时类型识别),它使程序能够获取由基指针或引用所指向的对象的实际派生类型,即允许“用指向基类的指针或引用来操作对象”的程序能够获取到“这些指针或引用所指对象”的实际派生类型。在C++中,为了支持RTTI提供了两个操作符:dynamic_cast和typeid。 dyn转载 2012-05-20 12:50:42 · 1034 阅读 · 0 评论 -
static_cast、dynamic_cast、reinterpret_cast、和const_cast
static_cast、dynamic_cast、reinterpret_cast、和const_cast关于强制类型转换的问题,很多书都讨论过,写的最详细的是C++ 之父的《C++ 的设计和演化》。最好的解决方法就是不要使用C风格的强制类型转换,而是使用标准C++的类型转换符:static_cast, dynamic_cast。标准C++中有四个类型转换符:static_cast、dynam转载 2012-05-19 19:12:47 · 1541 阅读 · 0 评论 -
拷贝构造函数被调用的时机
拷贝构造函数被调用的时机:1. 当用类的一个对象去初始化该类的另一个对象(或引用)时系统自动调用拷贝构造函数实现拷贝赋值。2. 若函数的形参为类对象,调用函数时,实参赋值给形参,系统自动调用拷贝构造函数。3. 当函数的返回值是类对象时,系统自动调用拷贝构造函数。下面给出一个例子:#include using namespace std;class原创 2012-05-01 12:21:47 · 4329 阅读 · 0 评论 -
深入理解C++中的mutable关键字
mutalbe的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词。 在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。 我们知道,如果类的成员函数不会改变对象的状态,那么这个成员函数一般会声明成const的。但是,有些时候,我们需要在const的函数里面原创 2012-04-08 22:10:01 · 793 阅读 · 0 评论 -
C++ 点滴积累(1)
1.引用和指针的区别?答:引用与指针的差别很大,指针是个变量,可以把它再变成指向别处的地址,然而, 建立引用时必须初始化,并且它不能再依附其他不同的变量了。可以这么说,引用是一个变/常量的别名。对其引用操作就等于对这个变/常量操作。C++中不为引用分配空间.如下例:#include using namespace std;void main(){ int a = 3, b =原创 2011-10-22 10:20:11 · 838 阅读 · 0 评论 -
C++ 点滴积累(2)
1.C++中不为引用分配空间,C++如何输出数值的16/8进制,和如何输出字符串首地址。#include using namespace std;void main(){ int a = 15; int &ref_a = a; //不为引用分配空间,它和所指变量的地址是相同的 cout << "变量a address: " << (&a) << endl; c原创 2011-10-22 14:33:58 · 739 阅读 · 0 评论 -
effective C++笔记
http://blog.csdn.net/lifu119/article/details/7329617转载 2012-04-08 17:10:43 · 607 阅读 · 0 评论 -
C++ 类的聚集和浅拷贝与深拷贝
1.类的聚集类的成员中含有某类的指针,这种类叫类的聚集。又被称为“远程所有权”(remote ownership)。该类的对象的数据将存放在对象外边,对象中只存放数据的地址。数据可以是数组、对象等。2.浅拷贝与深拷贝浅拷贝–实现对象间数据元素的一一对应复制。这是拷贝构造函数的本能。当数据元素是指针的时候,则出问题。深拷贝–当被复制的对象数据成员是原创 2011-10-03 17:50:55 · 5941 阅读 · 0 评论 -
C++ new 用法
先看一下new和malloc的区别:动态存储分配的运算符与函数的区别malloc( )和free()是动态存储管理函数;new 和delete是动态存储管理运算符。它们功能类似但完全不同。前者是函数,运行需要头文件,返回值无类型,创建对象时不调用构造函数(销毁对象时不调用析构函数);而后者是运算符,不需要头文件,返回值有类型,创建对象时调用构造函数(销毁对象时调用析构函数)原创 2011-10-03 17:19:00 · 2161 阅读 · 0 评论 -
C++ 内存管理
一、内存基本构成可编程内存在基本上分为这样的几大部分:静态存储区、堆区和栈区。他们的功能不同,对他们使用方式也就不同。 静态存储区:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。它主要存放静态数据、全局数据和常量。栈区:在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算转载 2011-10-04 01:11:58 · 781 阅读 · 0 评论 -
异质链表的例子
一个异质链表,具体要求如下:编制一个处理异质结点链表的C++程序,即该链表中的每个结点是几种可能的数据结构中的一种。为简便计,结点仅涉及高校中的学生(student)、职工(staff)、教师(teacher)三类,其中:student属性有:证件号(identity转载 2011-10-05 10:20:28 · 5966 阅读 · 1 评论 -
C++ const 修饰的对象成员
用const修饰对象成员“常”机制的引入原创 2011-10-03 10:55:05 · 862 阅读 · 0 评论 -
C++ 类的前向引用 和 explicit仅用于关闭构造函数的转换功能
前向引用声明类应该先声明,后使用如果需要在某个类的声明之前,引用该类,则应进行前向引用声明(前置声明)。前向引用声明只为程序引入一个标识符,但具体声明在其它地方。eg:class B; //前向引用声明class A{ public:v原创 2011-10-02 23:15:00 · 1401 阅读 · 0 评论 -
C++ list 类学习笔记
双向循环链表list list是双向循环链表,,每一个元素都知道前面一个元素和后面一个元素。在STL中,list和vector一样,是两个常被使用的容器。和vector不一样的是,list不支持对元素的任意存取。list中提供的成员函数与vector类似,不原创 2011-09-29 00:12:00 · 107077 阅读 · 0 评论 -
c++ STL set和multiset 学习笔记
C++ STL set和multiset 1,set的含义是集合,它是一个有序的容器,里面的元素都是排序好的,支持插入,删除,查找等操作,就像一个集合一样。所有的操作的都是严格在logn时间之内完成,效率非常高。set和multiset的区别是:set插入的元素不能相同,原创 2011-10-01 15:48:32 · 3512 阅读 · 0 评论 -
C++ vector 类学习笔记
vector简介 vector是STL中最常见的容器,它是一种顺序容器,支持随机访问。vector是一块连续分配的内存,从数据安排的角度来讲,和数组极其相似,不同的地方就是:数组是静态分配空间,一旦分配了空间的大小,就不可再改变了;而vector是动态分配空间,随着元原创 2011-09-27 22:27:32 · 19222 阅读 · 0 评论 -
STL SET 常用操作简介[转载]
STL SET 常用操作简介[转载]这是微软帮助文档中对集合(set)的解释: “描述了一个控制变长元素序列的对象(注:set中的key和value是Key类型的,而map中的key和value是一个pair结构中的两个分 量)的模板类,每一个元素包含了一个排序键(sor转载 2011-09-27 21:43:59 · 700 阅读 · 0 评论 -
C/C++ 转义字符的完整诠释
转义字符是C语言中表示字符的一种特殊形式。通常使用转义字符表示ASCII码字符集中不可打印的控制字符和特定功能的字符,如用于表示字符常量的单撇号( ''),用于表示字符串常量的双撇号( ")和反斜杠( \)等。转义字符用反斜杠\后面跟一个字符或一个八进制或十六进制数表示。转载 2011-10-05 16:10:06 · 1286 阅读 · 0 评论 -
类的const成员变量、static const、static成员变量的初始化
本博客(http://blog.csdn.net/livelylittlefish )贴出作者(三二一@小鱼)相关研究、学习内容所做的笔记,欢迎广大朋友指正! 1. 宏定义 #define ASPECT_RATIO 1.653该宏定义ASPEC转载 2011-10-15 11:47:24 · 10218 阅读 · 0 评论 -
C++ 四个强制类型转换符和RTTI
1.新增的四个强制类型转换符“强制”的含义:在告诉编译器:“我知道你不愿意这样做,可是你必须做,尽管执行吧,后果由我负责!”const_cast除去对象的常属性。转换的是表达式而非自身. 形式:const_cast ( object )static_cast用来进转载 2011-10-04 14:21:10 · 2003 阅读 · 0 评论 -
C++ 局部类、内嵌类和抽象类
1.局部类是在函数体内定义的类。这个类以及由它创建的对象,都局限在该函数作用域中;必须在类内实现所有的成员函数,不能拿到类外。因为函数是不可以嵌套定义的;若类内含有静态数据成员,必须在该函数外初始化;类内不可含有静态函数成员;类中不可使用包裹它的函数所定义的除静态外的局部变量。eg 1:#include void fun(){class fo原创 2011-10-04 00:57:24 · 4791 阅读 · 0 评论 -
有符号数和无符号数间的比较
首先,我们必须得知道:不同类型数据进行混合运算时,编译器会自动进行类型转换。即:混合运算时数据类型的转换——隐含转换一些二元运算符(算术运算符、关系运算符、逻辑运算符、位运算符和赋值运算符)要求两个操作数的类型一致。在算术运算和关系运算中如果参与运算的操作数类型不一致,编译系统会自动对数据进行转换(即隐含转换),基本原则是将低类型数据转换为高类型数据。当参与运算原创 2011-10-05 14:15:53 · 2487 阅读 · 0 评论 -
C++ 二义性问题
二义性问题1.在继承时,基类之间、或基类与派生类之间发生成员同名时,将出现对成员访问的不确定性——同名二义性。2.当派生类从多个基类派生,而这些基类又从同一个基类派生,则在访问此共同基类中的成员时,将产生另一种不确定性——路径二义性。同名二义性同名隐藏规则——解决同名二义的方法 当派生类与基类有同名成员时,派生类中的成员将屏蔽基类中的同名原创 2011-10-04 00:20:39 · 17424 阅读 · 5 评论 -
C++ 虚函数与友元函数的配合
虚函数与友元函数的配合虚函数具有动态联编性,在类族中有强大功能;友元函数具有跨类访问的功能,但不能继承。二者若能巧妙结合,会同时发挥各自的功能。/*虚函数与友元函数的配合注意:VC++6.0 不支持友元 ,VS支持*/#include using namespace std;class Base{public: Base(){x=0;} Base(int xx){原创 2011-10-04 13:08:46 · 1727 阅读 · 0 评论 -
C、C++运算符优先级列表
1.C语言运算符优先级运算符按照优先级大小由上向下排列,在同一行的运算符具有相同优先级。第二行是所有的一元运算符。 运算符解释结合方式() [] -> .括号(函数等),数组,两种结构成员访问由左向右! ~ ++ -- + - * & (类型) sizeof否定,转载 2011-10-03 14:43:29 · 3997 阅读 · 0 评论 -
C++ 要点
C++的要点: 一个思想:抽象(和分类)的思想; 三个概念:类、对象、消息; 三个特征:封装、继承、多态; 一个观念:函数服务于数据。 程序 = 对象 + 消息 (对象 = 数据结构 + 算法) 封装及构造、拷贝构造、赋值、析构 继承及隐含规则 运算符重载 虚函数、原创 2011-10-22 17:41:55 · 912 阅读 · 0 评论 -
C++ 封装不是万能的 private 数据成员的值可以在类外被访问
封装不是万能的别以为有了类的封装性,私有成员就可以高枕无忧。#include using namespace std;class A{ int a;public: A(int aa):a(aa){} int & get() { return a; } void show() const { cout << "a = " << a << endl; }};原创 2011-10-02 22:11:22 · 2064 阅读 · 0 评论