C++编程思想
文章平均质量分 57
Nancy_m
挨踢人员 文艺程序员高级软件攻城诗个人铭言无淡泊以明志无宁静以致远
展开
-
VC++中面向过程的Static
面向过程设计中的static 1、静态全局变量 在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下: //Example 1 #include void fn(); static int n; //定义静态全局变量 void main() { n=20;原创 2013-04-22 11:52:10 · 1521 阅读 · 0 评论 -
C++编程学习——内存出错
. 数组越界;. 内存泄露;. 悬空指针(野指针);. 错误分配。 1. 数组越界: 程序反应: 跳出“内存不足。”提示框。调试的时候无法定位到准确的出错点,也就是程序崩溃的地方不确定。但是大致出错会在数组所在的函数里面或调用了数组的函数里,如果总弹出以上对话框,就检查出错代码附近是否有用到数组,特别是边界处要仔细检查。应用vector的时候也要转载 2012-10-05 18:11:11 · 1309 阅读 · 0 评论 -
断言的使用
何时需要使用断言1.可以在预计正常情况下程序不会到达的地方放置断言:ASSERT( FALSE );2.断言可以用于检查传递给私有方法的参数。(对于公有方法,因为是提供给外部的接口,所以必须在方法中有相应的参数检验才能保证代码的健壮性)3.使用断言测试方法执行的前置条件和后置条件4.使用断言检查类的不变状态,确保任何情况下,某个变量的状态必须满足。(如age属性应大于0小于某个原创 2012-09-12 15:39:33 · 4068 阅读 · 0 评论 -
C++编程学习-Switch-case语句
C++ 中Switch……case语句用于选择分支较多的情况, 在初期case只支持int型的数据类型,后期时开始支持char,string,enum类型的数据。原创 2012-09-09 21:05:05 · 1432 阅读 · 0 评论 -
const char*, char const*, char*const的区别
const char*, char const*, char*const的区别问题几乎是C++面试中每次都会有的题目。 这个知识易混点之前是看过了,今天做Linux上写GTK程序时又出现个Warning,发散一下又想到这个问题,于是翻起来重嚼一下。事实上这个概念谁都有只是三种声明方式非常相似:Bjarne在他的The C++ Programming Language里面给出原创 2012-08-23 17:28:32 · 737 阅读 · 0 评论 -
C++中Vector用法
Vector用于存储对象数组常用方法1.push_back 在数组的最后添加一个数据2.pop_back 去掉数组的最后一个数据3.at 得到编号位置的数据4.begin 得到数组头的指针5.end 得到数组的最后一个单元+1的指针原创 2012-07-28 15:51:11 · 1262 阅读 · 0 评论 -
#ifndef 与 #pragma once 的区别
#pragma once与 #ifndef的区别为了避免同一个文件被include多次1 #ifndef方式2 #pragma once方式在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别。 方式一: #ifndef __SOMEFILE_H__ #define __SOMEFILE_H__原创 2012-07-21 10:04:12 · 1056 阅读 · 1 评论 -
pragma comment的使用
该宏放置一个注释到对象文件或者可执行文件。#pragma comment( comment-type [,"commentstring"] )comment-type是一个预定义的标识符,指定注释的类型,应该是compiler,exestr,lib,linker之一。commentstring是一个提供为comment-type提供附加信息的字符串,Remarks:1、compi转载 2012-07-18 15:09:34 · 745 阅读 · 0 评论 -
VC6.0工程设置介绍
VC6.0工程设置介绍打开或新建一个包 含至少一个工程的Workspace后,VC6的Project菜单中的“Settings…”命令就变为有效,选择它或者按下热键Alt+F7后,便可调出工程设置对话框,这里面的选项将影响整个工程的建立和调试过程,因此很重要,虽然在一般情况下,其中的大多数选项都不用改变,但了解一下它们的含义能够消除我们心中存在的神秘感,并加深我们对VC工程的理解。转载 2012-05-23 16:10:47 · 1433 阅读 · 0 评论 -
C++—协变和抗变
协变、抗变英文分别是 Covariance 、Contravariance ,形容词为 '-ce '==> '-t ' 这是数学和物理学术语,在OO领域中也有应用。 “共变”、“逆变”是一种译法,另外一种译法是“协变”、“抗变”。特别在OO领域,基本上都是用后面这组。此外还有“不变(Nonvariance)”。 在OO中,协变是指按照继承链正向改变,抗变是指逆向改变转载 2012-10-06 20:11:21 · 4122 阅读 · 0 评论 -
C++编程思想学习.下卷——异常处理
异常处理增强错误恢复能力是提高代码健壮性的最有力的途径之一。将try块嵌套在for、while、do或者 if快中,并且触发异常来试图解决问题,然后重新测试try块中的代码。1.5 清理(1).资源管理异常处理的魅力之一在于程序能够从正常的处理流程中跳转到恰当的异常处理器中。如果异常抛出时,程序不能做恰当的清理工作,那么异常本身并没有什么用处。编写代码终于到异常时,就应该要注意原创 2012-10-07 13:29:49 · 2705 阅读 · 0 评论 -
虚基类、纯虚函数、抽象类
虚基类、纯虚函数和抽象类1、虚基类 在《多继承》中讲过的例子中,由类A,类B1和类B2以及类C组成了类继承的层次结构。在该结构中,类C的对象将包含两个类A的子对象。由于类A是派生类C两条继承路径上的一个公共基类,那么这个公共基类将在派生类的对象中产生多个基类子对象。如果要想使这个公共基类在派生类中只产生一个基类子对象,则必须将这个基类设定为虚基类。原创 2012-09-17 14:16:05 · 1894 阅读 · 0 评论 -
利用C++模板,代替虚函数实现类的静态多态性及动态继承
熟悉模板编程的朋友或许听到过这个技巧或者模式:Barton-Nackmann 技巧或者称 奇异循环模板模式(Curiously Recurring Template Prattern)。 其实在 《c++ 编程语言》这本bible 书里,在模板那章提到过一个很奇妙的类的实现,用的就是这个技术。当时,我就被C++模板技术叹为观止。近期在学boost库时偶然碰到了这个技巧,同时在写一个类时转载 2013-03-19 14:45:50 · 4439 阅读 · 0 评论 -
[编程好习惯] 利用编程语言特性提高程序执行效率
转自“李云” 博客:http://yunli.blog.51cto.com/831344/252954利用编程语言的特性不但能简化程序,而且还能提高程序的执行效率。先看一个使用sizeof()提高程序效率的例子程序,图1是没有使用sizeof()之前的代码,其背景信息需要在此做一个交代。其中,alarm_string变量是定义为长度是255的char数组,而tail_msg定义的是一个指向转载 2012-10-22 14:00:09 · 1073 阅读 · 0 评论 -
Const、volatile、mutable的用法
Const,Const函数,Const变量,函数后面的Const 看到const 关键字,C++程序员首先想到的可能是const 常量。这可不是良好的条件反射。如果只知道用const 定义常量,那么相当于把火药仅用于制作鞭炮。const 更大的魅力是它可以修饰函数的参数、返回值,甚至函数的定义体。const 是constant 的缩写,“恒定不变”的意思。被const 修饰的转载 2012-10-20 11:42:09 · 1181 阅读 · 0 评论 -
C++中string的Reserve() 和 capacity()
reserve原型: #include void reserve( size_type size = 0 );函数reserve()将字符串的容量设置为至少size. 如果size指定的数值要小于当前字符串中的字符数(亦即size ), 容量将被设置为可以恰好容纳字符的数值. reserve()以线性时间(linear time)运行.resize转载 2012-10-17 10:47:23 · 16298 阅读 · 0 评论 -
vector容器与iterator迭代器-C++
vector容器vector是同一种类型的对象的集合,每个对象都有一个对应的整数索引值。和string对象一样,标准库负责管理存储元素的相关内存。我们把vector称为容器,是因为它可以包含其他对象。一个容器中的所有对象都必须是同一种类型的。使用vector之前,必须包含相应的头文件。#include using std::vector;vector是一个类模板(class t转载 2012-10-15 14:34:13 · 20185 阅读 · 0 评论 -
C、C++不定参数的使用
原帖:http://blog.csdn.net/arong1234/archive/2008/05/18/2456455.aspx 不定参数当年做为C/C++语言一个特长被很多人推崇,但是实际上这种技术并没有应用很多。除了格式化输出之外,我实在没看到多少应用。主要原因是这种技术比较麻烦,副作用也比较多,而一般情况下重载函数也足以替换它。尽管如此,既然大家对它比较感兴趣,我就转载 2012-10-09 20:42:43 · 1395 阅读 · 0 评论 -
C++——CString用法大全
VC:CString用法大全列表形式的如下:CString的构造函数CString( );例:CString csStr;CString( const CString& stringSrc );例:CString csStr("ABCDEF中文123456"); CString csStr2(csStr);CString( TC转载 2012-10-10 14:27:07 · 55063 阅读 · 1 评论 -
C++编程准则(1)
2、 文件的属性以及开始和结束注释标记1、 文件的属性以及开始和结束注释标记a) 在每一个文件的头部用注释填写:章节号:文件名,以及该文件所完成的功能。b) 如何一个文件是头文件,则什么也不用做c) 如果这个文件中的程序中不含main()(即,不含主程序的.cpp的文件),这必须与其他部分连接,所以,在注释行的文件名后添加:{O}d转载 2012-05-23 16:03:10 · 793 阅读 · 0 评论 -
C++编程准则(3)
41. 避免用预处理器。可以用常量来代替值,用内联函数代替宏。42. 保持范围尽可能地小,这样我们的对象的可见性和生命周期也就尽可能地小。这就减少了错用对象和隐藏难以发现的错误的可能性。43. 避免使用全局变量。尽可能把数据放在类中。全局函数的存在可能性要比全局变量大。一个全局函数作为一个类的静态成员更合适。44. 如果我们需要声明一个来自库中的类或函数,应该包含一个头文件的方法。而不转载 2012-05-23 16:07:32 · 643 阅读 · 0 评论 -
C++编程准则(2)
16. 注意长的参数表,这样的函数调用会难写、难读、难于维护。应该把这个函数改成一个合适的类,用对象作为参数传递。17. 不要自我重复。如果一段代码在派生类的许多函数中重复出现,就把这段代码放在基类的一个单一的函数中然后在派生类中调用它。这样既节省了代码空间,又使将来的修改容易传播。我们可以用内联函数来提高效率。有时我们会发现这种通用代码会为我们的接口添加有用的功能转载 2012-05-23 16:05:58 · 601 阅读 · 0 评论 -
C++编程思想学习——引用和拷贝构造函数
1、 C++中引用的3大特性a) 创建时必须要被初始化b) 一旦创建后指向一个对象即不能指向别的对象c) 不可能有NULL的引用。必须要确保引用是和一块合法的存储单元关联。可以把引用看做一个是语法更加便利的工具。2、 函数中的引用a) 常量的引用:将函数的参数定义为常量时,在函数中就不会对参数改变。这样无论什原创 2012-04-10 16:51:16 · 948 阅读 · 0 评论 -
C++编程思想学习-概论
1接口操接口就是规定了我们可以向对象发送什么请求以及请求的格式。向对象发送消息即为提出请求。2隐藏实现 将客户程序员和类库底层实现分离。易于库的维护和开发,同时简化了客户程序员的负担,客户程序员不用关注具体库是如何实现的,而只要知道类库可以提供什么功能,如何使用即可。 通过关键字实现类中的边界,保护类中的成员。关键字:public private pr原创 2012-03-22 11:32:53 · 758 阅读 · 0 评论 -
C++编程思想学习——名字控制
1、 静态元素静态变量:静态变量存储于固定地址,而非栈式分配,在调用时,只有第一次调用才进行初始化。静态对象:同静态变量一致同样需要初始化操作。但是,编译器自动赋值(也称零赋值只对内部类型有效,而对于用户自定义类型必须用构造函数来初始化。静态对象的构造函数在进入main函数体前执行。静态对象的析构函数会在main函数退出后执行。所以,利用这一点在main函数之前和之后执行一定的代原创 2012-04-09 20:09:58 · 992 阅读 · 0 评论 -
C++编程思想学习-对象的创建与使用
1、分段编译、连接 通过变量命名空间,将一个大的程序构造为许多小的程序。而这些小的程序可以单独编译,单独调试。 函数、变量的定义需要编译器在他们的定义的点分配空间。而声明则不是。函数的声明为,告诉编译器函数的特征,从而编译器能够使用这些特征信息进行安全性的检查。 变量的声明同样如此,使用关键词:extern。 包含头文件则:如果为什么声明原创 2012-03-23 18:13:13 · 694 阅读 · 0 评论 -
C++编程思想学习——常量
1、常量的基本概念 常量是用来表示在程序运行中不会改变的量。常量的作用域和普通变量的作用域是相同的。常量可以用做值替换。常量也可以用来存储在程序运行期间产生的值,但是,该值在整个生命周期内是不会改变的,这样如果有在运行期间试图改变它则会给出错误信息,从而提高了程序的安全性。同时,常量也可以用于集合,用于描述一个不会改变的存储块。但是,编译器不会将整个集合保存到符号表中原创 2012-04-06 16:06:21 · 848 阅读 · 0 评论 -
C++编程思想学习——内联函数
1、预处理器的缺陷 预处理器的宏虽然降低了函数调用的额外开销,使用宏也表面上好像是使用函数一样。但是,使用宏时可能在预处理器的展开后,表达式的优先级,以及表达式展开后的多次求值可能使我们的程序获得的结果并不是我们所要求的,特别是将宏当做函数一样使用时。由于宏存在这样的缺点,但是,为了效率,所以,产生了内联函数。内联函数几乎具有函数的一切行为,但是却不需要函数调用的开销。2、内原创 2012-04-06 21:26:27 · 763 阅读 · 0 评论 -
C++编程思想学习—函数重载与默认函数
1、函数重载 C++中可以用相同的函数名但是参数列表不同来区分函数。编译器连接时会修饰这些名字、类型、范围来产生内部的名字供连接器使用。但是由于返回值对于函数的调用不是必须的,有些函数调用只是利用了函数调用的副作用。而不要求其返回值。所以,C++中静止用返回值的不同来产生函数的重载。2、联合 联合同class除了数据存储的方式不同,union为内存区覆盖式存放原创 2012-03-29 16:21:35 · 794 阅读 · 0 评论 -
C++编程思想学习—初始化与清除
1、构造与析构函数c++中为了确保对象能够在使用之前初始化,再离开对象的作用域(同变量的作用域范围是一样的)时确保清楚它,C++的对象中添加了构造和析构函数用于实现上面的功能。构造和析构函数,由编译器负责将构造函数的调用代码插入到对象创建语句紧挨着的后面,而在程序离开对象的作用域时编译器负责将析构函数的调用代码插入到作用域范围的最后一条语句之后。这样在程序真正的执行时,就保证了,每个对象在创建原创 2012-03-29 11:20:22 · 794 阅读 · 0 评论 -
C++编程思想学习——运算符重载
1、 运算符重载的实质a) 只是函数的另外一种调用形式,只是为了语法上的方便而已。b) 基于运算符的实质只是为了语法上的方便,所以,运算符重载不能滥用,而且只能在类中使用,只有在能使类的更加易写或者更加易读的情况下才使用运算符重载否则适得其反。同时,只能对那些C中有的运算符才能重载,对于C中没有的不能重载,重载亦不能改变运算符的优先级,不能改变运算符的参数个原创 2012-04-12 22:05:58 · 835 阅读 · 0 评论 -
C++编程思想学习——动态对象创建
1、 对象的创建a) 创建一个对象时会发生两件事:为对象分配内存、调用构造函数来初始化那块内存。b) 分配内存:可以在程序运行前在静态存储空间分配;无论什么时候在一个特殊的执行点,即在左大括号时可以在存储单元上创建一定的存储;同时也可以从一块称为为堆的地方分配,在运行时分配这些内存。c) C语言利用malloc、free等函数来动态的申请原创 2012-04-14 11:42:02 · 793 阅读 · 0 评论 -
C++中的string类
转自:http://www.newsmth.net/pc/pccon.php?id=10002714&nid=359771 C++之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必 担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用 = 进行赋值操作转载 2012-04-13 20:57:27 · 691 阅读 · 0 评论 -
C++编程思想学习-隐藏实现
1、C++中的访问控制 Public,private不用介绍,protected,可以被继承的结构访问。 这里重点一提的是protected是专为继承而设计的。Protected在所属类的成员函数和在类的外部函数中对类的对象的可见性与private是一样的——都不可见。而protected只有在继承时才表现出与private的不一致,即protected在子类中是可原创 2012-03-28 21:05:02 · 908 阅读 · 0 评论 -
C++编程思想学习——多态性与虚函数
1、 虚函数与向上类型转换使用向上类型转换时,将派生类的对象传递给一个基类的对象,用转换后基类的对象调用相应的成员函数时,调用的是基类的成员函数,而并非派生类对象的成员函数。但是,程序在运行时,我们经常希望无论什么时候一个类的对象都是调用的本类的成员函数而不是基类的成员函数。所以,为了达到这一目的,C++中采用“晚捆绑”技术,即在程序运行时才将函数体与函数调用想联系起来,而不是过程型语言原创 2012-05-16 15:25:34 · 998 阅读 · 0 评论 -
C++编程思想学习—C++中的C特征
1、数据类型C++标准只规定每种数据类型的最大值、最小值。至于用二进制编码表示,还是以BCD码表示并未规定,所以,对于不同的编译器,不同的造作系统(如:32位的以及64位的操作系统),每种数据类型所占用的字节数不一定相同。Float为单精度浮点数,double为双精度浮点数。说明符用于修改数据类型具有的最大值、最小值。说明符有short,long, signed, unsigned。原创 2012-03-24 17:00:16 · 2441 阅读 · 2 评论 -
C++的句柄类思想
C + +中的存取控制允许将实现与接口部分分开,但实现的隐藏是不完全的。编译器必须知道一个对象的所有部分的声明,以便创建和管理它。我们可以想象一种只需声明一个对象的公共接口部分的编程语言,而将私有的实现部分隐藏起来。但C + +在编译期间要尽可能多地做静态类型检查。这意味着尽早捕获错误,也意味着程序具有更高的效率。然而这对私有的实现部分来说带来两个影响:一是即使程序员不能轻易地访问实现部分,但他可转载 2012-05-22 20:00:22 · 1790 阅读 · 0 评论 -
C++编程思想学习——模版介绍
1、 模版的作用继承和组合提供了重用对象代码的方法,而C++的模版提供了重用源代码的方法。当引入模版时,就不再使用基于对象的类的层次结构来实现容器了。模版提供了更好的机制。2、模版在头文件中的布局 由于可能存在多重定义的问题,一般不讲类的实现放在头文件中,但是,模版的定义很特殊,template之后的任何东西都编译器当时都不为它分配存储空间,而是一直等到被一个模版实例原创 2012-05-22 11:51:47 · 1090 阅读 · 0 评论 -
C++编程思想学习——编程风格
1、 文件的属性以及开始和结束注释标记a) 在每一个文件的头部用注释填写:章节号:文件名,以及该文件所完成的功能。b) 如何一个文件是头文件,则什么也不用做c) 如果这个文件中的程序中不含main()(即,不含主程序的.cpp的文件),这必须与其他部分连接,所以,在注释行的文件名后添加:{O}d) 如果,文件是主程序(含有main原创 2012-05-22 11:53:46 · 2568 阅读 · 2 评论 -
C++中的C_str()函数用法
语法: const char *c_str();c_str()函数返回一个指向正规C字符串的指针常量, 内容与本string串相同. 这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式。注意:一定要使用strcpy()函数 等来操作方法c_str()返回的指针 比如:最好不要这样: cha转载 2012-05-19 20:38:18 · 52707 阅读 · 0 评论