自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zjlove1989的专栏

C++编程资料查询

  • 博客(112)
  • 资源 (3)
  • 收藏
  • 关注

原创 C++对称字符串的最大长度

题目:输入一个字符串,输出该字符串中对称的子字符串的最大长度。比如输入字符串“google”,由于该字符串里最长的对称子字符串是“goog”,因此输出4。

2014-08-01 17:18:04 835

转载 屏幕录像专家 - 视频压缩教程

大家在用屏幕录像专家录制视频之后,生成出来的视频文件总是很大,在网络上传输也很不方便,这里介绍一种压缩的方法,可以极大的缩小视频文件的体积,方便传输:1、在屏幕录像专家的软件左侧的录像文件列表中对录制好的文件点击鼠标右键,在弹出的菜单中选择“修改EXE播放设置(X)” 如下图:2、在弹出的“EXE播放设置”对话框中,在“图像压缩”和“声音压缩”选项中,分别选中“无损压缩”和“有损压

2014-05-26 09:24:40 1395

转载 附录 A :C++/C 代码审查表

2014-05-25 17:52:47 443

转载 11.3 一些有益的建议

【建议11-3-1】当心那些视觉上不易分辨的操作符发生书写错误。我们经常会把“==”误写成“=”,象“||”、“&&”、“=”这类符号也很容易发生“丢1”失误。然而编译器却不一定能自动指出这类错误。【建议11-3-2】变量(指针、数组)被创建之后应当及时把它们初始化,以防止把未被初始化的变量当成右值使用。

2014-05-25 17:36:09 361

转载 11.2 提高程序的效率

程序的时间效率是指运行速度,空间效率是指程序占用内存或者外存的状况。全局效率是指站在整个系统的角度上考虑的效率,局部效率是指站在模块或函数角度上考虑的效率。【规则11-2-1】不要一味地追求程序的效率,应当在满足正确性、可靠性、健壮性、可读性等质量因素的前提下,设法提高程序的效率。【规则11-2-2】以提高程序的全局效率为主,提高局部效率为辅。【规则11-2-3

2014-05-25 17:34:47 409

转载 11.1 使用const 提高函数的健壮性

看到 const 关键字,C++程序员首先想到的可能是const 常量。这可不是良好的条件反射。如果只知道用const 定义常量,那么相当于把火药仅用于制作鞭炮。const 更大的魅力是它可以修饰函数的参数、返回值,甚至函数的定义体。const 是constant 的缩写,“恒定不变”的意思。被const 修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。所以很多C++

2014-05-25 17:25:39 324

转载 第 11 章其它编程经验索引

11.1 使用const 提高函数的健壮性

2014-05-25 17:20:50 340

转载 10.2 组合

【规则10-2-1】若在逻辑上A 是B 的“一部分”(a part of),则不允许B 从A 派生,而是要用A 和其它东西组合出B。例如眼(Eye)、鼻(Nose)、口(Mouth)、耳(Ear)是头(Head)的一部分,所以类Head 应该由类Eye、Nose、Mouth、Ear 组合而成,不是派生而成。如示例10-2-1所示。

2014-05-25 17:13:45 329

转载 10.1 继承

如果 A 是基类,B 是A 的派生类,那么B 将继承A 的数据和函数。例如:class A{public:void Func1(void);void Func2(void);};class B : public A{public:void Func3(void);void Func4(void);};main(){B b;b.Func

2014-05-25 17:07:21 332

转载 第 10 章类的继承与组合索引

对象(Object)是类(Class)的一个实例(Instance)。如果将对象比作房子,那么类就是房子的设计图纸。所以面向对象设计的重点是类的设计,而不是对象的设计。对于 C++程序而言,设计孤立的类是比较容易的,难的是正确设计基类及其派生类。本章仅仅论述“继承”(Inheritance)和“组合”(Composition)的概念。注意,当前面向对象技术的应用热点是COM

2014-05-25 17:03:38 407

转载 9.9 一些心得体会

有些 C++程序设计书籍称构造函数、析构函数和赋值函数是类的“Big-Three”,它们的确是任何类最重要的函数,不容轻视。也许你认为本章的内容已经够多了,学会了就能平安无事,我不能作这个保证。如果你希望吃透“Big-Three”,请好好阅读参考文献[Cline] [Meyers] [Murry]。

2014-05-22 21:56:54 418

转载 9.8 如何在派生类中实现类的基本函数

基类的构造函数、析构函数、赋值函数都不能被派生类继承。如果类之间存在继承关系,在编写上述基本函数时应注意以下事项:派生类的构造函数应在其初始化表里调用基类的构造函数。基类与派生类的析构函数应该为虚(即加virtual 关键字)。例如

2014-05-22 21:53:37 334

转载 9.7 偷懒的办法处理拷贝构造函数与赋值函数

如果我们实在不想编写拷贝构造函数和赋值函数,又不允许别人使用编译器生成的缺省函数,怎么办?偷懒的办法是:只需将拷贝构造函数和赋值函数声明为私有函数,不用编写代码。例如:class A{ …private:A(const A &a); // 私有的拷贝构造函数A & operate =(const A &a); // 私有的赋值函数};如果有人试图编写如下程序:

2014-05-22 21:47:47 286

转载 9.6 示例:类String 的拷贝构造函数与赋值函数

// 拷贝构造函数String::String(const String &other){ // 允许操作other 的私有成员m_data int length = strlen(other.m_data); m_data = new char[length+1]; strcpy(m_data, other.m_data);}// 赋值函数String & String::op

2014-05-22 21:45:08 494

转载 指针总结

2014-05-20 22:50:00 320

转载 访问堆中的数据成员

假如我们要访问对象的数据成员和函数,我们使用成员运算符" . "。  #include using namespace std;class Human{   public:      Human(){cout构造函数执行中......\n";i=999;}      ~Human(){cout析构函数执行中......\n";}      int get()

2014-05-20 21:27:05 400

转载 在堆中删除对象

假如我们要删除在堆中创建的对象,我们可以直接删除指向该对象的指针,这样会自动调用对象的析构函数来销毁该对象同时释放内存。 #include using namespace std;class Human{   public:      Human(){cout构造函数执行中......\n";i=999;}      ~Human(){cout析构函数执行中....

2014-05-20 21:26:16 412

转载 在堆中创建对象

我们既然可以在堆中保存变量,那么也就可以保存对象,我们可以将对象保存在堆中,然后通过指针来访问它。 #include using namespace std;int main(){     Human *p;     p=new Human;     return 0;} 第一行定义了一个Human类的指针p,第二行使用new创建一块内存空间,同时又调用

2014-05-20 21:25:21 1223

转载 内存泄露

假如没有删除一个指针就对其重新赋值,如: #include using namespace std;int main(){     int *p=new int;      p=new int;     return 0;} 这样就会造成内存泄露。 第一行定义了一个指针p并使其指向一块内存空间,第二行又将一块新的内存空间的地址赋给了p。这样第一行

2014-05-20 21:23:50 380

转载 栈 和 堆

一般来说,程序就是与数据打交道,在执行某一功能的时候,将该功能所需要的数据加载到内存中,然后在执行完毕的时候释放掉该内存。 数据在内存中的存放共分为以下几个形式: 1、栈区(stack)—— 由编译器自动分配并且释放,该区域一般存放函数的参数值、局部变    量的值等。 2、堆区(heap)—— 一般由程序员分配释放,若程序员不释放,程序结束时可能由操作系   统回

2014-05-20 21:20:38 457

原创 为什么使用指针

很多初学者都会问,既然通过变量名就可以访问数据,为什么还要使用繁琐而又容易出错的指针呢?这是因为在操作大型数据和类时,由于指针可以通过内存地址直接访问数据,从而避免在程序中复制大量的代码,因此指针的效率最高一般说来,指针会有三大用途: 1:处理堆中存放的大型数据。2:快速访问类的成员数据和函数。3:以别名的方式向函数传递参数。

2014-05-20 21:17:49 472

转载 9.5 不要轻视拷贝构造函数与赋值函数

由于并非所有的对象都会使用拷贝构造函数和赋值函数,程序员可能对这两个函数有些轻视。请先记住以下的警告,在阅读正文时就会多心:本章开头讲过,如果不主动编写拷贝构造函数和赋值函数,编译器将以“位拷贝”的方式自动生成缺省的函数。倘若类中含有指针变量,那么这两个缺省的函数就隐含了错误。以类String 的两个对象a,b 为例,假设a.m_data 的内容为“hello”,b.m_data

2014-05-18 21:45:25 318

转载 9.4 示例:类String 的构造函数与析构函数

// String 的普通构造函数String::String(const char *str){if(str==NULL){m_data = new char[1];*m_data = ‘\0’;}else{int length = strlen(str);m_data = new char[length+1];strcpy(m_data, str);}}// St

2014-05-18 21:41:00 352

转载 9.3 构造和析构的次序

构造从类层次的最根处开始,在每一层中,首先调用基类的构造函数,然后调用成员对象的构造函数。析构则严格按照与构造相反的次序执行,该次序是唯一的,否则编译器将无法自动执行析构过程。一个有趣的现象是,成员对象初始化的次序完全不受它们在初始化表中次序的影响,只由成员对象在类中声明的次序决定。这是因为类的声明是唯一的,而类的构造函数可以有多个,因此会有多个不同次序的初始化表。如果成员对象按照

2014-05-18 21:37:58 313

转载 9.2 构造函数的初始化表

构造函数有个特殊的初始化方式叫“初始化表达式表”(简称初始化表)。初始化表位于函数参数表之后,却在函数体 {} 之前。这说明该表里的初始化工作发生在函数体内的任何代码被执行之前。构造函数初始化表的使用规则:如果类存在继承关系,派生类必须在其初始化表里调用基类的构造函数。例如class A{…A(int x); // A 的构造函数};class B : pu

2014-05-18 21:36:00 421

转载 9.1 构造函数与析构函数的起源

作为比C 更先进的语言,C++提供了更好的机制来增强程序的安全性。C++编译器具有严格的类型安全检查功能,它几乎能找出程序中所有的语法问题,这的确帮了程序员的大忙。但是程序通过了编译检查并不表示错误已经不存在了,在“错误”的大家庭里,“语法错误”的地位只能算是小弟弟。级别高的错误通常隐藏得很深,就象狡猾的罪犯,想逮住他可不容易。根据经验,不少难以察觉的程序错误是由于变量没有被正确初始化

2014-05-18 21:27:23 323

转载 第 9 章类的构造函数、析构函数与赋值函数索引

构造函数、析构函数与赋值函数是每个类最基本的函数。它们太普通以致让人容易麻痹大意,其实这些貌似简单的函数就象没有顶盖的下水道那样危险。每个类只有一个析构函数和一个赋值函数,但可以有多个构造函数(包含一个拷贝构造函数,其它的称为普通构造函数)。对于任意一个类A,如果不想编写上述函数,C++编译器将自动为A 产生四个缺省的函数,如A(void); // 缺省的无参数构造函数

2014-05-18 21:25:43 399

转载 8.6 一些心得体会

C++ 语言中的重载、内联、缺省参数、隐式转换等机制展现了很多优点,但是这些优点的背后都隐藏着一些隐患。正如人们的饮食,少食和暴食都不可取,应当恰到好处。我们要辨证地看待C++的新机制,应该恰如其分地使用它们。虽然这会使我们编程时多费一些心思,少了一些痛快,但这才是编程的艺术。

2014-05-18 17:46:26 331

转载 8.5 函数内联

8.5.1 用内联取代宏代码

2014-05-18 17:32:13 338

转载 8.4 运算符重载

8.4.1 概念在 C++语言中,可以用关键字operator 加上运算符来表示函数,叫做运算符重载。例如两个复数相加函数:Complex Add(const Complex &a, const Complex &b);可以用运算符重载来表示:

2014-05-18 17:19:14 331

转载 8.3 参数的缺省值

有一些参数的值在每次函数调用时都相同,书写这样的语句会使人厌烦。C++语言采用参数的缺省值使书写变得简洁(在编译时,缺省值由编译器自动插入)。参数缺省值的使用规则:【规则8-3-1】参数缺省值只能出现在函数的声明中,而不能出现在定义体中。例如:void Foo(int x=0, int y=0); // 正确,缺省值出现在函数的声明中void Foo(int x=0,

2014-05-18 17:12:30 420

转载 8.2 成员函数的重载、覆盖与隐藏

成员函数的重载、覆盖(override)与隐藏很容易混淆,C++程序员必须要搞清楚概念,否则错误将防不胜防。8.2.1 重载与覆盖成员函数被重载的特征:(1)相同的范围(在同一个类中);(2)函数名字相同;(3)参数不同;(4)virtual 关键字可有可无。覆盖是指派生类函数覆盖基类函数,特征是:(1)不同的范围(分别位于派生类与基类);

2014-05-18 17:00:39 347

转载 QQ中抖动窗口的vc++实现方法

其实,QQ中抖动窗口的实现很简单,当用户按下抖动按钮的时候,播放一个WAV文件和按一定的顺序移动窗口就完了。。下面让我们来看一下具体的实现方法:创建对话框应用程序,向对话框中添加一个按钮。讲按钮Caption改为:抖动窗口;然后双击按钮,为按钮添加BN_CLICK消息,在消息函数中我们会用到PlaySound这个SDK函数,用来播放WAV文件,也就是播放一段声音,该函数的第一个参数为p

2014-05-18 16:35:12 944

转载 8.1 函数重载的概念

8.1.1 重载的起源自然语言中,一个词可以有许多不同的含义,即该词被重载了。人们可以通过上下文来判断该词到底是哪种含义。“词的重载”可以使语言更加简练。例如“吃饭”的含义十分广泛,人们没有必要每次非得说清楚具体吃什么不可。别迂腐得象孔已己,说茴香豆的茴字有四种写法。在 C++程序中,可以将语义、功能相似的几个函数用同一个名字表示,即函数重载。这样便于记忆,提高了函数的易用性,

2014-05-18 16:26:45 393

转载 第 8 章 C++函数的高级特性索引

对比于C 语言的函数,C++增加了重载(overloaded)、内联(inline)、const 和virtual四种新机制。其中重载和内联机制既可用于全局函数也可用于类的成员函数,const 与virtual 机制仅用于类的成员函数。重载和内联肯定有其好处才会被C++语言采纳,但是不可以当成免费的午餐而滥用。本章将探究重载和内联的优点与局限性,说明什么情况下应该采用、不该采用以及

2014-05-18 16:05:54 358

转载 7.12 一些心得体会

我认识不少技术不错的C++/C 程序员,很少有人能拍拍胸脯说通晓指针与内存管理(包括我自己)。我最初学习C 语言时特别怕指针,导致我开发第一个应用软件(约1万行C 代码)时没有使用一个指针,全用数组来顶替指针,实在蠢笨得过分。躲避指针不是办法,后来我改写了这个软件,代码量缩小到原先的一半。我的经验教训是:(1)越是怕指针,就越要使用指针。不会正确使用指针,肯定算不上是合格的程序员。

2014-05-18 15:59:02 372

转载 7.11 new/delete 的使用要点

运算符new 使用起来要比函数malloc 简单得多,例如:int *p1 = (int *)malloc(sizeof(int) * length);int *p2 = new int[length];这是因为new 内置了sizeof、类型转换和类型安全检查功能。对于非内部数据类型的对象而言,new 在创建动态对象的同时完成了初始化工作。如果对象有多个构造函数,那么new 的语

2014-05-18 15:54:06 311

转载 7.10 malloc/free 的使用要点

函数 malloc 的原型如下:void * malloc(size_t size);用 malloc 申请一块长度为length 的整数类型的内存,程序如下:int *p = (int *) malloc(sizeof(int) * length);我们应当把注意力集中在两个要素上:“类型转换”和“sizeof”。malloc 返回值的类型是void *,

2014-05-18 15:48:21 375

转载 7.9 内存耗尽怎么办?

如果在申请动态内存时找不到足够大的内存块,malloc 和new 将返回NULL 指针,宣告内存申请失败。通常有三种方式处理“内存耗尽”问题。(1)判断指针是否为NULL,如果是则马上用return 语句终止本函数。例如:void Func(void){A *a = new A;if(a == NULL){return;}…}(2)判断指

2014-05-18 10:47:12 458

转载 7.8 有了malloc/free 为什么还要new/delete ?

malloc 与free 是C++/C 语言的标准库函数,new/delete 是C++的运算符。它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用maloc/free 无法满足动态对象的要求。对象在创建的同时要自动执行构造函数, 对象在消亡之前要自动执行析构函数。由于malloc/free 是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函

2014-05-18 10:39:28 300

深入浅出密码学——常用加密技术原理与应用

本书主要讲解加密技术的原理和在编程过程中的应用,内容生动详细

2014-08-26

cocoszd安装详细步骤

cocoszd安装主要介绍cocos2d的安装步骤和注意事项,让大家轻松的完成安装

2014-08-26

ListCtrl控件中插入进度条类CProcessList

一个vc ListCtrl控件中插入进度条类CProcessList

2014-05-11

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除