随笔分类 -  c/c++

十进制与二进制间的相互转换
摘要:1. 二进制转十进制方法:“按权展开求和”例:(1011.01)2 =(1×2^3 + 0×2^2 + 1×2^1 + 1×2^0 + 0×2^(-1) + 1×2^(-2) )10=(8+0+2+1+0+0.25)10=(11.25)10规律:个位上的数字的次数是0,十位上的数字的次数是1,......,依次递增,而十分位的数字的次数是-1,百分位上数字的次数是-2,......,依次递减。注意:不是任何一个十进制小数都能转换成有限位的二进制数。2. 十进制转二进制(1)十进制整数转二进制数:“除以2取余,逆序排列,直到商为0”(除 阅读全文

posted @ 2013-02-27 09:32 zhuyf87 阅读(1219) 评论(0) 推荐(0)

c++ 友元关系与继承
摘要:友元关系不能继承。基类的友元对派生类的成员没有特殊访问权限。如果基类被授予友元关系,则只有基类具有特殊访问权限,该基类的派生类不能访问授予友元关系的类。class Base{ friend class frnd;protected: int i;}// Frnd has no access to members in D1class D1 : public Base{protected: int j;};class Frnd{public: int mem(Base b) { return b.i; } // ok: Frnd is friend to Base ... 阅读全文

posted @ 2013-02-25 20:48 zhuyf87 阅读(3125) 评论(0) 推荐(0)

c++ 重载 >>(输入) 、<< (输出) 操作符
摘要:重载输出操作符 <<为了与标准库IO操作一致,重载 << 操作符函数应把ostream&作为其第一个参数,对类类型const对象的引用作为第二个参数,并返回对ostream形参的引用。ostream& operator<<(ostream& out, const Sales_item& s){ out << s.isbn << “\t” << s.units_sold << “\t” << s.revenue << “\t” << s.avg_ 阅读全文

posted @ 2013-02-25 17:35 zhuyf87 阅读(38857) 评论(0) 推荐(3)

c++ 重载操作符
摘要:重载操作符是具有特殊名称的函数,函数名称由关键字operator后接操作符符号。Sales_item operator+(const Sales_item& lhs, const Sales_item& rhs);绝大多数操作符都可以重载,不能重载的操作符包括:“::”、 “.*”、 “.”、 “?:”。重载操作符必须具有一个类类型(或枚举类型)的操作数,这条规则强制了重载操作符不能重新定义用于内置类型的操作符的含义。重载操作符时,操作符的优先级、结合性、操作数数目不能变。“+、-、*、&”四个符号既可以是一元操作符,也可以是二元操作符。究竟重载的是哪个,由重载操作符的 阅读全文

posted @ 2013-02-24 20:54 zhuyf87 阅读(487) 评论(0) 推荐(0)

c++ static类成员
摘要:使用类的static成员的优点:(1)static成员在类的作用域中,避免与其他作用域的名字冲突。(2)可以实施封装。static成员可以是私有成员,它遵循正常的公有、私有访问规则。(3)static成员与特定类关联,更能清晰的显示出程序的意图。class Account{public: // interface functions here void applyint() { amount += amount * interestRate; } static double rate() { return interestRate; } static void rate... 阅读全文

posted @ 2013-02-23 12:01 zhuyf87 阅读(283) 评论(0) 推荐(0)

zlib压缩数据
摘要:zlib是用于数据压缩的函数库,使用DEFLATE算法。最初是为libpng函数库开发,后来普遍为许多软件所使用。zlib为自由软件。DEFLATE是同时使用了LZ77算法与哈夫曼编码(Huffman Coding)的一个无损数据压缩算法。zlib在业界应用广泛,包括:Linux kernel:使用zlib实作网络协定的压缩、档案系统的压缩以及开机时解压缩内核。libpng,用于PNG图形格式的一个实现,对bitmap数据规定了DEFLATE作为流压缩方法。Apache:使用zlib实作http 1.1。OpenSSH、OpenSSL:以zlib达到最佳化加密网络传输。FFmpeg:以zlib 阅读全文

posted @ 2013-02-21 14:17 zhuyf87 阅读(8524) 评论(0) 推荐(0)

c++ 友元机制
摘要:友元(friend)机制允许一个类将对其非私有成员的访问权授予给指定的函数或类。友元以关键字friend(在类定义的内部)声明。通常将友元声明成组的放在类定义的开始或结尾。class Screen { // Window_Mgr members can access private parts of class Screen friend class Window_Mgr; …}Window_Mgr& Window_Mgr::relocate(Screen::index r, Screen::index c, Screen& s){ s.height += r; ... 阅读全文

posted @ 2013-02-21 07:29 zhuyf87 阅读(389) 评论(0) 推荐(0)

c++ 类类型的隐式转换
摘要:单实参构造函数定义了从形参类型到该类类型的一个隐式转换。class Sales_item {public: // default argument for book is the empty string Sales_item(const std::string &book = “”): isbn(book), units_sold(0), revenue(0.0) { } Sales_item(std::istream &is);};这里的两个构造函数都定义了一个隐式转换。因此在需要使用一个Sales_item类型对象的地方,也可以使用一个string或is... 阅读全文

posted @ 2013-02-19 18:01 zhuyf87 阅读(652) 评论(0) 推荐(0)

关于c++ class的几个知识点
摘要:(1)inline成员函数class Screen {public: typedef std::string::size_type index; // implicitly inline when defined inside the class declaration char get() const { return contents[cursor]; } // explicitly declared as inline; will be defined outside the class declaration inline char get(index h... 阅读全文

posted @ 2013-02-17 14:40 zhuyf87 阅读(317) 评论(0) 推荐(0)

c++ 重载函数
摘要:出现在相同作用域中的两个函数,如果具有相同的名字而形参表不同,则称为重载函数(overloaded function)。Record lookup(const Account&); // find by AccountRecord lookup(const Phone&); // find by PhoneRecord lookup(const Name&); // find by Name这三个函数的函数名相同,但却是三个不同的函数。编译器根据所传递的实参类型来判断调用哪个函数。不能仅仅基于不同的返回类型而实现函数重载。有些看起来不相同的形参表实质上是相同的:// e 阅读全文

posted @ 2013-02-05 17:32 zhuyf87 阅读(308) 评论(0) 推荐(0)

合理使用inline函数提高效率
摘要:函数调用需要保存现场,并在函数执行完毕之后恢复现场,中间还要经历参数赋值,程序转向一个新位置执行等等。所以函数调用存在一定的时间和空间开销。c++的inline(内联)函数可以用来消除函数调用带来的额外开销,inline函数会在各个调用点内联展开。一般来说,inline函数的定义分为两种:显示方式:inline const string& shorterString(const string &s1, const string &s2){ return s1.size() < s2.size() ? s1 : s2;}隐式方式:c++标准规定在类内部定义了函数体的 阅读全文

posted @ 2013-02-04 18:12 zhuyf87 阅读(2112) 评论(0) 推荐(1)

c++ 函数声明
摘要:函数声明由返回类型、函数名和形参列表(这三个元素组成函数原型 function prototype)组成,形参列表可以只包含形参类型而不包含形参名。函数通常在头文件中声明,在源文件中定义。可以给函数添加默认实参,这样编译器会为省略的实参提供默认值。不过,如果有一个形参具有默认实参,那么它后面所有的形参都必须有默认实参。string screenInit(string::size_type height = 24, string::size_type width = 80, char background = ‘ ‘);调用sc... 阅读全文

posted @ 2013-02-04 16:03 zhuyf87 阅读(3118) 评论(0) 推荐(0)

c语言可变参数函数
摘要:原文地址:http://www.ibm.com/developerworks/cn/linux/l-va/index.html原文名称为“深入浅出VA函数”,这里只转载前两个部分,关于后面的编译器如何实现等内容,由于不是很需要,所以没有转载。VA函数(variable argument function),参数个数可变函数,又称可变参数函数。C/C++编程中,系统提供给编程人员的va函数很少。*printf()/*scanf()系列函数,用于输入输出时格式化字符串;exec*()系列函数,用于在程序中执行外部文件(main(int argc, char* argv[]算不算呢,与其说main( 阅读全文

posted @ 2013-02-04 10:48 zhuyf87 阅读(506) 评论(0) 推荐(0)

c++ 数组形参
摘要:数组形参会被弱化为指针,所以处理数组的函数通常通过指向数组中元素的指针来处理数组。// three equivalent definitions of printValuesvoid printValues(int *) { /* … */ }void printValues(int []) { /* … */ }void printValues(int [10]) { /* … */ }上面3种定义等价,形参类型都是int *,通常使用第1种。第2种形式虽然看起来更直观,但容易引起误解,因为函数操纵的毕竟不是数组本身,而是指向数组元素的指针。第3种形式的数组长度是被忽略的,这里的10并无实际 阅读全文

posted @ 2013-02-03 16:16 zhuyf87 阅读(7743) 评论(0) 推荐(0)

使用do{ } while(0);有什么好处?
摘要:原帖地址:http://bbs.csdn.net/topics/390361821?page=1#post-393624278【gq414047080】:_Api(){ do { //do something }while(0);}这样的写法有什么好处啊?将楼主的问题扩展一下,do{} while(0);的用处都有什么?不仅限于楼主所贴代码的使用形式。这里整理一些(我觉得)比较有意义的回帖:【happynesslele】:有时候只是为了代码分块,比仅仅使用{}更直观些。bool CCLayer::init(){bool bRet = false; ... 阅读全文

posted @ 2013-02-01 18:30 zhuyf87 阅读(8732) 评论(1) 推荐(1)

c++ 显示类型转换
摘要:c++引入了4个新的强制类型转换操作符,static_cast、dynamic_cast、const_cast、reinterpret_cast,用以支持更为精细的类型转换。这些操作符取代了以往小圆括号所代表的旧式转型,能够清楚阐明转型的目的。这些新式转型操作符给了编译器更多信息,让编译器清楚知道转型的理由,并在转型失败时释出一份错误报告。1. static_caststatic_cast在功能上基本上与C风格的类型转换一样强大,所以它是4个操作符中最常用的那个。但它也有功能上的限制,例如static_cast 不能从表达式中去除const属性(这是const_cast的工作)。int fir 阅读全文

posted @ 2013-02-01 17:46 zhuyf87 阅读(819) 评论(0) 推荐(0)

c++ 隐式类型转换
摘要:隐式类型转换由编译器自动执行,不需程序员介入。何时发生隐式类型转换1. 在混合类型的表达式中,操作数会被转换为相同类型int ival;double dval;ival >= dval; // ival converted to double2. 条件表达式会被转换为bool类型。int ival;if (ival) // ival converted to boolwhile (cin) // cin converted to bool条件操作符(? :)中的第一个操作数,逻辑非(!)、逻辑与(&&)、逻辑或(||)的操作数都是条件表达式。if、while、do whi 阅读全文

posted @ 2013-02-01 12:40 zhuyf87 阅读(7176) 评论(0) 推荐(0)

c++ 自增、自减 操作符
摘要:自增(++)和自减(--)操作符,都分为前置(++i、--i)和后置(i++、i--)两种形式。应该优先使用前置形式,只在必要时使用后置形式。道理很简单:前置操作符需要做的工作更少,只需加1后返回结果即可。而后置形式需要先保存操作数原来的值,然后加1,再返回原来的值。对于内置类型,编译器可以对后置进行优化。但对于非内置类型,后置操作符所做的额外工作可能会花费很大的代价。所以养成使用前置操作这个好习惯,就不必操心性能差异的问题。不过有时的确需要返回变量加1前的值,这时就必须要使用后置操作符了。比如下面这段代码非常“流行”:vector<int>::iterator iter = iv 阅读全文

posted @ 2013-01-31 18:53 zhuyf87 阅读(393) 评论(0) 推荐(0)

c++ 指针与 typedef
摘要:当同时使用const和typedef修饰指针时,容易产生误解。typedef string *pstring;const pstring cstr;cstr具体的类型是什么?很容易错误理解为“const string *cstr;”,也就是说cstr是常量指针(指向string类型const对象的指针),其实这是错误的。并不能简单把“const pstring cstr;”中的pstring仅仅作文本扩展,变为“const string *cstr;”。声明const pstring时,const修饰的是pstring类型,pstring是一个指针,因此cstr是一个const指针(指向str 阅读全文

posted @ 2013-01-31 15:38 zhuyf87 阅读(216) 评论(0) 推荐(0)

区分“常量指针”和“指针常量”
摘要:指向const常量的指针(常量指针):关键字 const出现在*号左边,表示指针所指向的地址的内容是不可修改的,但是指针自身可变,也就是指针本身可以修改以指向其他内容。如:const int * p1 = &i;int const * p2 = &i;const指针(指针常量):关键字const出现在*号右边,表示指针自身不可变,但其指向的地址的内容是可以修改的。如:int * const p3 = &i;指向const常量的const指针:指针自身不可修改,指针所指向的内容也不可以修改。如:const int * const p4 = &i;int const 阅读全文

posted @ 2013-01-31 14:50 zhuyf87 阅读(212) 评论(0) 推荐(0)

导航