随笔分类 -  C/C++重要知识点

1 2 3 下一页
成员以其在类中声明的顺序构造
摘要:分析以下代码的输出:#includeusing namespace std;class A{public: A(int j):age(j) , num(age + 1) { cout<<"age:"<<age<<",num:"<<num<<endl; }protected: int num; int age;};void main(){ A sa(15);}运行结果:age:15 , num:2(num为一个随机数)由于按成员在类定义中的声明顺序进行构造,而不是按构造函数说明中冒号后面的顺序,所 阅读全文
posted @ 2013-11-12 16:58 猿人谷 阅读(1233) 评论(0) 推荐(0) 编辑
memset函数使用方法
摘要:将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值, 块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为指向S的指针。需要的头文件在C中 在C++中 更详细的解说见百度百科 -->http://baike.baidu.com/view/982208.htm1. void *memset(void *s,int c,size_t n)总的作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c。2。例子void main(){char *s="Golden Global View";clrscr();memset(s, 阅读全文
posted @ 2013-11-12 15:10 猿人谷 阅读(61280) 评论(1) 推荐(2) 编辑
qsort(),sort()排序函数
摘要:一.qsort()函数功 能: 使用快速排序例程进行排序头文件:stdlib.h用 法: void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *));参数: 1 待排序数组首地址 2 数组中待排序元素数量 3 各元素的占用空间大小 4 指向函数的指针,用于确定排序的顺序qsort(即,quicksort)主要根据你给的比较条件给一个快速排序,主要是通过指针移动实现排序功能。排序之后的结果仍然放在原来数组中。其中qsort和compare的用法如下:void qs... 阅读全文
posted @ 2013-11-03 09:56 猿人谷 阅读(14775) 评论(0) 推荐(1) 编辑
C++命名规则
摘要:如果想要有效的管理一个稍微复杂一点的体系,针对其中事物的一套统一、带层次结构、清晰明了的命名准则就是必不可少而且非常好用的工具。活跃在生物学、化学、军队、监狱、黑社会、恐怖组织等各个领域内的大量有识先辈们都曾经无数次地以实际行动证明了以上公理的正确性。除了上帝(设它可以改变世间万物的秩序)以外,相信没人有实力对它不屑一顾。在软件开发这一高度抽象而且十分复杂的活动中,命名规则的重要性更显得尤为突出。一套定义良好并且完整的、在整个项目中统一使用的命名规范将大大提升源代码的可读性和软件的可维护性。在引入细节之前,先说明一下命名规范的整体原则:同一性在编写一个子模块或派生类的时候,要遵循其基类或整体模 阅读全文
posted @ 2013-10-11 10:44 猿人谷 阅读(5780) 评论(1) 推荐(4) 编辑
static_cast ,reinterpret_cast
摘要:用法:static_cast ( expression )该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法:①用于类层次结构中基类(父类)和派生类(子类)之间指针或引用的转换。进行上行转换(把派生类的指针或引用转换成基类表示)是安全的;进行下行转换(把基类指针或引用转换成派生类表示)时,由于没有动态类型检查,所以是不安全的。②用于基本数据类型之间的转换,如把int转换成char,把int转换成enum。这种转换的安全性也要开发人员来保证。③把空指针转换成目标类型的空指针。④把任何类型的表达式转换成void类型。注意:stat. 阅读全文
posted @ 2013-10-10 17:05 猿人谷 阅读(15216) 评论(0) 推荐(2) 编辑
运算符重载
摘要:C++中预定义的运算符的操作对象只能是基本数据类型。但实际上,对于许多用户自定义类型(例如类),也需要类似的运算操作。这时就必须在C++中重新定义这些运算符,赋予已有运算符新的功能,使它能够用于特定类型执行特定的操作。运算符重载的实质是函数重载,它提供了C++的可扩展性,也是C++最吸引人的特性之一。 运算符重载是通过创建运算符函数实现的,运算符函数定义了重载的运算符将要进行的操作。运算符函数的定义与其他函数的定义类似,惟一的区别是运算符函数的函数名是由关键字operator和其后要重载的运算符符号构成的。运算符函数定义的一般格式如下: operator (){ } 运算符重载时... 阅读全文
posted @ 2013-10-06 21:21 猿人谷 阅读(1037) 评论(0) 推荐(0) 编辑
C/C++ 语言中的表达式求值
摘要:在此,首先向裘老师致敬!裘宗燕:C/C++语言中的表达式求值经常可以在一些讨论组里看到下面的提问:“谁知道下面C语句给n赋什么值?”m=1;n=m+++m++;最近有位不相识的朋友发email给我,问为什么在某个C++系统里,下面表达式打印出两个4,而不是4和5:a = 4; cout << a++ << a;C++不是规定<<操作左结合吗?是C++书上写错了,还是这个系统的实现有问题?注:运行a = 4; cout << a++ << a;如在Visual c++ 6.0中,得到的是4和4;在Visual Studio中,得到的是4 阅读全文
posted @ 2013-09-26 10:31 猿人谷 阅读(4436) 评论(0) 推荐(2) 编辑
C++继承中的内存布局
摘要:今天在网上看到了一篇写得非常好的文章,是有关c++类继承内存布局的。看了之后获益良多,现在转在我自己的博客里面,作为以后复习之用。——谈VC++对象模型(美)简.格雷程化 译译者前言一个C++程序员,想要进一步提升技术水平的话,应该多了解一些语言的语意细节。对于使用VC++的程序员来说,还应该了解一些VC++对于C++的诠释。 Inside the C++ Object Model虽然是一本好书,然而,书的篇幅多一些,又和具体的VC++关系小一些。因此,从篇幅和内容来看,译者认为本文是深入理解C++对象模型比较好的一个出发点。这篇文章以前看到时就觉得很好,旧文重读,感觉理解得更多一些了,于是产 阅读全文
posted @ 2013-09-22 14:32 猿人谷 阅读(2230) 评论(3) 推荐(3) 编辑
虚继承的内存模型分析
摘要:这里就先从以下几个点进行说明吧:虚继承和虚基类vs2010下的cl命令内存模型 虚继承和虚基类 虚继承:在继承定义中包含了virtual关键字的继承关系; 虚基类:在虚继承体系中的通过virtual继承而来的基类,需要注意的是:class CSubClass : public virtual CBase {}; 其中CBase称之为CSubClass的虚基类,而不是说CBase就是个虚基类,因为CBase还可以不不是虚继承体系中的基类。 vs2010下的cl命令 微软的VS2010提供了一个新的选项,给用户显示C++对象在内存中的布局。这个选项就是:[cpp] view plainco... 阅读全文
posted @ 2013-09-22 10:37 猿人谷 阅读(1087) 评论(0) 推荐(0) 编辑
位运算
摘要:以后慢慢启用个人博客:http://www.yuanrengu.com 位运算 位运算是把数字用二进制表示之后,对每一位上0或者1的运算。 理解位运算的第一步是理解二进制。二进制是指数字的每一位都是0或者1.比如十进制的2转化为二进制之后就是10。在程序员的圈子里有一个流传了很久的笑话,说世界上有1 阅读全文
posted @ 2013-09-09 22:36 猿人谷 阅读(4918) 评论(2) 推荐(4) 编辑
C++类的静态成员详细讲解
摘要:在C++中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所有对象共用。所以在所有对象中都可以共享它。使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还可以节省内存。静态成员的定义或声明要加个关键static。静态成员可以通过双冒号来使用即::。在C++中类的静态成员变量和静态成员函数是个容易出错的地方,本文先通过几个例子来总结静态成员变量和成员函数使用规则,再给出一个实例来加深印象。希望阅读本文可以使读者对类的静态成员变量和成员函数有更为深刻的认识。第一个例子,通过类名调用静态成员函数和非静态成员函数[cpp] view plaincopyclass 阅读全文
posted @ 2013-09-02 14:02 猿人谷 阅读(12318) 评论(6) 推荐(2) 编辑
需要友元的原因及使用
摘要:有时候,普通函数需要直接访问一个类的保护或私有数据成员。如果没有友元机制,则只能将类的数据成员声明为公共的,从而,任何函数都可以无约束的访问它。普通函数需要直接访问类的保护或私有数据成员的原因主要是为提高效率。在类里声明一个普通函数,标上关键字friend,就成了该类的友元,可以访问该类的一切成员。需要友元的另一个原因是为了方便重载操作符的使用。友元函数不是成员函数,它是类的朋友,因而能够访问类的全部成员。在类的内部,只能声明它的函数原型,加上friend关键字。友元声明的位置可以在类的任何部位,既可在public区,也可在protected区,意义完全一样。友元函数定义则在类的外部,一般与类 阅读全文
posted @ 2013-08-31 17:01 猿人谷 阅读(1962) 评论(0) 推荐(0) 编辑
高质量软件开发之道
摘要:1. 学习"高质量编程"的目的是要在干活的时候一次性编写出高质量的程序,而不是当程序出错后再去修补2. 十大软件质量属性包括:正确性(Correctness): 指软件按照需求正确执行任务的能力。正确性是第一重要的软件质量属性。健壮性(Robustness): 指在异常情况下,软件能够正常运行。健壮性包括容错能力和恢复能力。可靠性(Reliability): 指在一定环境下,在给定的时间内,系统不发生故障的概率。性能(Performance): 通常是指软件的时空效率。程序员可通过优化数据结构、算法和代码来提高软件的性能。易用性(Usability): 指用户使用软件的容易 阅读全文
posted @ 2013-08-30 19:42 猿人谷 阅读(1305) 评论(0) 推荐(0) 编辑
进制之间的转换
摘要:今天翻了一本计算机基础的书籍,其中十进制、二进制、八进制、十六进制之间的转换挺有意思的,也容易犯糊涂,特温故而知新。十进制数制系统十进制数制系统包括10个数字:0、1、2、3、4、5、6、7、8、9基为:10逢十进一,如3+7=10,20+80=100二进制数制系统计算机中使用二进制表示数据二进制包括两个符号:0和1二进制逢二进一:(1+1)2=(10)2二进制的基为2示例:1000101100101101八进制数制系统用于缩短二进制的数字长度八进制基是8,使用的符号为:0、1、2、3、4、5、6、7逢八进一,即(7+1)8=(10)8十六进制数制系统十六进制数制系统的基是16十进制:0、1、 阅读全文
posted @ 2013-08-27 16:50 猿人谷 阅读(1382) 评论(0) 推荐(0) 编辑
struct 与 typedef struct
摘要:1. 基本解释 typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。 在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。 至于typedef有什么微妙之处,请你接着看下面对几个问题的具体阐述。2. typedef & 结构的问题 当用下面的代码定义一个结构时,编译器报了一个错误,为什么呢?莫非C语言不允许在结构中包含指向它自己的指针吗?请你先猜想一下,然后看下文说明:typedef struct tagNode{  阅读全文
posted @ 2013-08-23 18:48 猿人谷 阅读(3989) 评论(0) 推荐(0) 编辑
C++重要知识点小结---3
摘要:C++重要知识点小结---1:http://www.cnblogs.com/heyonggang/p/3246631.htmlC++重要知识点小结---2:http://www.cnblogs.com/heyonggang/p/3253036.html1.什么是智能指针?智能指针是一个行为类似指针但也提供其他功能的类。智能指针类实现普通指针行为的类的区别在于:智能指针通常接收指向动态分配对象的指针并负责删除该对象。用户分配对象,但由智能指针类删除它,因此智能指针类需要实现复制控制成员来管理指向共享对象的指针。只有在撤销了指向共享对象的最后一个智能指针后,才能删除该共享对象。使用计数是实现智能指 阅读全文
posted @ 2013-08-14 17:03 猿人谷 阅读(997) 评论(0) 推荐(0) 编辑
C++ 虚拟继承
摘要:1.为什么要引入虚拟继承虚拟继承是多重继承中特有的概念。虚拟基类是为解决多重继承而出现的。如:类D继承自类B1、B2,而类B1、B2都继 承自类A,因此在类D中两次出现类A中的变量和函数。为了节省内存空间,可以将B1、B2对A的继承定义为虚拟继承,而A就成了虚拟基类。实现的代码如 下:class Aclass B1:public virtual A;class B2:public virtual A;class D:public B1,public B2;虚拟继承在一般的应用中很少用到,所以也往往被忽视,这也主要是因为在C++中,多重继承是不推荐的,也并不常用,而一旦离开了多重继承,虚拟继承就 阅读全文
posted @ 2013-08-13 15:03 猿人谷 阅读(14850) 评论(1) 推荐(2) 编辑
C++重要知识点小结---2
摘要:C++重要知识点小结--1 :http://www.cnblogs.com/heyonggang/p/3246631.html1.C++允许程序员声明一个不能有实例对象的类,这样的类惟一的用途是被继承。这种类成为抽象类。一个抽象类至少具有一个纯虚函数。所谓纯虚函数是指被标明为不具体实现的虚成员函数。如:virtual void WithDrawal(float amount) = 0; //纯虚函数在WithDrawal()的声明之后的“=0”表明程序员将不定义该函数。该声明是为派生类而保留的位置。一个抽象类不能有实例对象,即不能由该类抽象来制造一个对象。纯虚函数是在基类中为子类保留的一个位. 阅读全文
posted @ 2013-08-12 15:39 猿人谷 阅读(5678) 评论(0) 推荐(0) 编辑
静态成员函数和非静态成员函数的区别?
摘要:一个静态成员函数不与任何对象相联系,故不能对非静态成员进行默认访问。它们的根本区别在于静态成员函数没有this指针,而非静态成员函数有一个指向当前对象的指针this。例如: 1 class Sc 2 { 3 public: 4 void nsfn(int a); //像声明Sc::nsfn(Sc *this , int a); 5 static void sfn(int a); // 无this指针 6 //.... 7 }; 8 9 void f(Sc &s)10 {11 s.nsfn(10); // 转换为Sc::nsfn(&s , 10)12 ... 阅读全文
posted @ 2013-08-12 10:58 猿人谷 阅读(12855) 评论(0) 推荐(0) 编辑
C++内存管理学习堆和栈
摘要:来源:http://c.chinaitlab.com/basic/936306_2.html 一 C++内存管理1.内存分配方式 在讲解内存分配之前,首先,要了解程序在内存中都有什么区域,然后再详细分析各种分配方式。1.1 C语言和C++内存分配区 下面的三张图,图1图2是一种比较详细的C语言的内存区域分法。图3是典型的C++内存分布图,简单易懂;以下内存分配图,区别就是图1和2则分为初始化和未初始化静态变量区,图3中是全局变量区。 C语言(图1和图2):(由低地址到高地址) a)正文段:用来存放程序执行代码。通常,正文段是可共享的。另外,正文段常常是只读的,一次防止程序由于意外修改其... 阅读全文
posted @ 2013-08-10 16:15 猿人谷 阅读(3901) 评论(0) 推荐(3) 编辑

1 2 3 下一页