自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 资源 (1)
  • 收藏
  • 关注

转载 C语言:C语言指针的概念

在计算机中,所有的数据都是存放在存储器中的。一般把存储器中的一个字节称为一个内存单元,不同的数据类型所占用的内存单元数不等,如整型量占2个单元,字符量占1个单元等。为了正确地访问这些内存单元,必须为每个内存单元编上号。根据一个内存单元的编号即可准确地找到该内存单元。内存单元的编号也叫做地址。既然根据内存单元的编号或地址就可以找到所需的内存单元,所以通常也把这个地址称为指针。 内存单元的指针

2015-04-05 19:20:13 415

转载 C语言:前言

指针是C语言中广泛使用的一种数据类型。运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构;能很方便地使用数组和字符串;并能象汇编语言一样处理内存地址,从而编出精练而高效的程序。指针极大地丰富了C语言的功能。学习指针是学习C语言中最重要的一环,能否正确理解和使用指针是我们是否掌握C语言的一个标志。同时,指针也是C语言中最为困难的一部分,在学习中除了要正确理

2015-04-05 18:06:59 584

原创 如何生成自己的静态库(lib)文件

打开VS2010,建立一个win32控制台程序,然后打开项目--Tv属性(如图1),打开Tv属性页(如图2),在右边配置类型处选择静态库(lib)。然后我们就可以写我们的头文件和cpp源文件了。写完后编译下就可以在目录下找到相应的lib文件了。在这里我首先写一个相对复杂的库文件,头文件内容是://tv.h#ifndef TV_H_#def

2015-03-25 15:44:05 1395

原创 异常处理

我们开发的软件一般按照正常的流程操作时运行不会出问题,但是用户不一定会根据软件工程师的想法来操作软件,而且往往随机性很大,另外,软件的运行环境也会改变,例如硬盘空间不足、文件被移走,这些都可能会导致软件出现异常,甚至崩溃。所以我们进行软件开发时要充分考虑异常的捕捉和处理。       一.异常处理的基本思想       进行异常处理的目标是,使软件具有容错能力,在出现运行环境或者异

2015-03-24 19:33:11 376

原创 多态性:纯虚函数和抽象类

抽象类可以为某个类族提供统一的操作接口。外部可以透明的使用抽象类的统一接口,而不需要知道到底是调用的抽象类的哪个派生类的成员函数。其实这些也可以通过在基类中定义虚函数来实现,但抽象类跟一般类不同的是,它使用纯虚函数,不需要定义纯虚函数的实现,而且抽象类不能实例化,即不能定义抽象类的对象,只能从它继承出非抽象派生类再实例化。       抽象类的定义就是,含有纯虚函数的类。纯虚函数跟一般的虚

2015-03-24 16:59:48 466

原创 多态性:虚函数

先来讲讲赋值兼容规则。       前面说过,派生类如果是从基类公有继承的,则它会包含基类中除构造函数和析构函数外的所有成员,基类的公有成员也成为派生类的公有成员,又因为对象只能访问类的公有成员,所以基类对象具有的功能,派生类对象都有。这样就引出了赋值兼容规则。       赋值兼容规则就是指在基类对象可以使用的地方都可以用公有派生类对象来代替。注意必须是公有派生类。赋值兼容规则中

2015-03-24 15:52:30 547

原创 多态性:运算符重载为类的友元函数

友元函数通过类的对象可以访问类的公有、保护和私有成员,也就是类的所有成员友元函数都能访问到。所以运算符重载为类的友元函数以后也可以访问类的所有成员。       与运算符重载为成员函数时不同的是,重载的友元函数不属于任何类,运算符的操作数都需要通过函数的形参表传递。操作数在形参表中从左到右出现的顺序就是用运算符写表达式时操作数的顺序。       这里也分双目运算符和单目运算符两种

2015-03-24 10:40:22 598

原创 多态性:运算符重载为类的成员函数

运算符重载为类的成员函数后就可以像其他成员函数一样访问本类的数据成员了。在类的外部通过类的对象,可以像原运算符的使用方式那样使用重载的运算符,比如,“+”运算符被重载为类A的成员函数后,A的对象a和其他对象b就可以这样进行加法运算:a+b。       重载的运算符可能是双目运算符也可能是单目运算符。       如果是双目运算符,比如“+”和“-”,则一个操作数是使用此运算符的对

2015-03-23 21:30:17 463

原创 继承与派生:虚基类及其派生类的构造函数

1.虚基类的概念及用法       前面说过,如果派生类的全部或者部分基类有共同的基类,那么派生类的这些直接基类从上一级基类继承的成员都具有相同的名称,定义了派生类的对象后,同名数据成员就会在内存中有多份拷贝,同名函数也会有多个映射。访问这些同名成员时,为了唯一标识它们可以使用作用域分辨符,也可以使用虚基类技术。我们将派生类直接基类的共同基类声明为虚基类后,派生类从不同的直接基类继承来的同

2015-03-17 21:16:23 652

原创 继承与派生:作用域分辨符

访问派生类的成员有可见性和唯一性两个问题,我们只能访问到具有唯一性的可见成员。       先说说可见性的问题。如果有两个以上具有包含关系的作用域,外层作用域中的标识符在内层作用域中没有同名标识符则它在内层作用域中也是可见的,但是如果在内层作用域中存在同名标识符则外层的标识符被屏蔽,这也叫做同名覆盖。派生类在继承时,基类的成员和派生类的新增成员都有类作用域,但是是两个具有包含关系的作用域,

2015-03-17 20:54:30 633

原创 继承与派生:派生类的析构函数

派生类的析构函数也是在派生类对象释放的时候进行清理工作的。前面说过,派生类无法继承基类的析构函数,所以如果需要的话就要自己定义析构函数。派生类析构函数的定义方式与一般类的析构函数是一样的,也是没有返回类型,没有参数,所以比构造函数需要注意的东西少多了。       派生类的析构函数一般只需要在其函数体中清理新增成员就可以了,对于继承的基类成员和派生类内嵌对象成员的清理,则一般由系统自动调用

2015-03-17 14:15:50 514

原创 继承与派生:派生类的构造函数

前面说过,基类的构造函数和析构函数派生类是不能继承的。如果派生类需要对新成员初始化或者进行特定的清理工作,就需要自己定义构造函数和析构函数了。从基类继承的成员的初始化仍可通过基类的构造函数来完成。       我们使用派生类的对象以前需要对它的数据成员进行初始化赋值。派生类的数据成员包括从基类继承来的数据成员和派生类新增的数据成员,还可能包括其他类的对象作为其数据成员,包括其他类的对象时实

2015-03-17 13:28:29 1333

原创 继承与派生:派生类对基类成员的访问控制之保护继承与私有继承

一.保护继承       在保护继承方式中,基类的公有成员和保护成员被派生类继承后变成派生类的保护成员,而基类的私有成员在派生类中不能访问。因为基类的公有成员和保护成员在派生类中都成了保护成员,所以派生类的新增成员可以直接访问基类的公有成员和保护成员,而派生类的对象不能访问它们,因为类的对象是处于类外的,不能访问类的保护成员。对基类的私有成员,派生类的新增成员函数和派生类对象都不能访问。

2015-03-16 16:49:33 2679

原创 继承与派生:派生类对基类成员的访问控制之公有继承

派生类从基类继承时有三个步骤,第一个步骤是吸收基类成员,吸收了基类中除构造函数和析构函数之外的所有数据成员和函数成员,第二个步骤就是修改基类成员,包括修改对基类成员的访问属性和覆盖基类成员,第三个步骤是添加新成员。第二个步骤中修改对基类成员的访问属性可以通过派生类的继承方式控制。      类的成员有public(公有)、protected(保护)和private(私有)三种访问属性。类的

2015-03-16 13:55:49 1192

原创 继承与派生:派生类从基类继承的过程

派生类从基类继承的过程可以分为三个步骤:吸收基类成员、修改基类成员和添加新成员。吸收基类成员就是代码复用的过程,修改基类成员和添加新成员实现的是对原有代码的扩展,而代码的复用和扩展是继承与派生的主要目的。       写一个雇员类和其派生类-销售人员类。这里只给出部分声明,了解下派生过程。        class employee                  //

2015-03-16 12:05:38 2356

原创 数组、指针和字符串:动态内存分配和释放

动态内存分配最常见的就是用来分配一个某类型的数组。我们可以使用数组来处理大量的数据,但实际上很多情况下我们并不知道此数组会有多少个元素,所以在定义数组时到底定义多大的数组就要仔细考虑下了。比如,我们要对输入的若干个数进行分析,得出所有的正数存到一个数组里以备他用,这个正数数组应该定义多大呢?如果大了可能会造成内存的浪费,如果小了可能会出现数组越界的情况。这种情况下比较理想的是判断全部数据里有多少个

2015-03-12 20:24:26 1624

原创 数组、指针和字符串:对象指针

一.什么是对象指针       每个变量都占有一定的内存空间,对象同样也需要占用内存空间。对象有数据成员和函数成员两种成员,但是实际上只有对象的数据成员会占用内存,函数成员则不会。我们可以通过对象名引用对象,也可以通过对象地址访问对象。对象指针就是存储对象地址的变量。声明对象指针的方式与一般的指针类似:       类名 *对象指针名;       使用对象名可以方便的访问

2015-03-08 20:01:58 286

原创 数组、指针和字符串:指针用作函数参数、指针型函数和函数指针

一.指针用作函数参数       指针作函数形参时,我们调用此函数将实参值传递给形参后,实参和形参指针变量将指向相同的内存地址,那么在被调函数中对形参指针所指向的对象的改变会一样影响主调函数中实参指针指向的对象。       指针用作函数参数用什么作用呢?其一,使形参指针和实参指针指向相同的内存地址,在被调函数中可以使用主调函数中的数据并可以改变主调函数中的数据,达到数据双向传递的

2015-03-07 16:34:33 1109

原创 数组、指针和字符串:指向数组元素的指针和指针数组

一.指向指针元素的指针        数组是有一定顺序关系的数组元素的集合,数组元素在内存中的存储地址是连续的。指针的加减运算特别适合处理这种存储在连续内存空间内的相同类型的数据,我们可以用指针方便的来处理数组元素的运算。       假设有一个声明:int a[10];,声明了一个一维整型数组,有10个元素。数组名a代表了数组a的首地址,它是一个指针常量,也就是不能改变,所以

2015-03-03 16:33:13 504

原创 C++程序设计必知:常引用、常对象和对象的常成员

数据的封装实现了数据的隐藏,让数据更安全,通过局部变量、全局变量、类的数据成员、类的静态成员及友元可以实现数据的共享,这样又降低了数据的安全性。有些数据是需要共享而又不能被改变的,那么这时候我们就要将其声明为常量。       我们也可以用const声明对象,叫做常对象。      1.常引用       用const声明的引用就是常引用。常引用所引用的对象不能被更改。我们

2015-03-01 16:58:17 745

原创 C++程序设计必知:友元

一种共享数据方式--友元。友元是一种破坏类的封装性获取类的隐藏数据的方式。       如果有以下程序:         class A        {         public:                    int Getx()   { return x; }         private:                    int x;       

2015-03-01 14:19:47 377

原创 C++程序设计必知:类的静态成员

函数之间共享数据也就是此函数访问彼函数的数据主要是通过局部变量、全局变量、类的数据成员、类的静态成员及友元实现的。静态成员包括静态数据成员和静态函数成员。       1.静态数据成员       一般的类的数据成员都是一个对象一个拷贝,每个对象都有自己的数据成员的值,但有时候我们需要让某个类的所有对象共享某个数据成员,比如有一个学生类CStudent,其中有学号、姓名等数据成员,

2015-02-26 19:18:07 462

转载 LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main(全)

LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main解决方法:控制台项目要使用windows子系统, 而不是console, 设置: [Project] --> [Settings] --> 选择"Link"属性页, 在Project Options中将/subsystem:console改成/subsyst

2015-01-30 10:38:22 19110

原创 C++程序设计必知:生存期

自然界中的事物都有产生和消亡,都有生存期,程序中的简单变量和类的对象也一样有它们的生存期,它们也会产生和消亡。对象的生存期分为静态生存期和动态生存期两种。什么叫做静态生存期和动态生存期呢?       1.静态生存期       若某个对象它的生存期与程序的运行期相同,我们就说它具有静态生存期,就是说在程序运行期间它都不会释放。       具有文件作用域的对象都具有静态生

2015-01-25 20:59:38 352

原创 C++程序设计必知:作用域和可见性

这些必知的知识包括作用域、可见性和生存期,还有局部变量、全局变量、类的数据成员、静态成员及友元和数据等。作用域是用来表示某个标识符在什么范围内有效,可见性是指标识符是否可见,可引用。       1.作用域       作用域是这样一个区域,标识符在程序的这个区域内是有效的。C++的作用域主要有四种:函数原型作用域、块作用域、类作用域和文件作用域。       a.函数原型

2015-01-25 19:56:16 511

原创 类与对象:类模板

类模板的指导思想跟函数模板类似。       代码复用是面向对象设计中的重要的软件开发思想,对于软件开发效率很是关键。怎样做好代码复用呢?越是通用的代码越好复用,将类型作为参数,这种程序设计类型就是参数化程序设计。模板就是C++进行参数化设计的工具。利用模板可以使用同一段程序处理不同类型的对象。       什么是类模板呢?类模板就是为类声明一种模板,使得类中的某些数据成员,或某些

2015-01-25 19:27:19 681

原创 static的全面理解(C部分)

出现位置:第一轮基础类笔试或技术一面难度系数:低相关题目:(1)列出所有你对static的理解,所有的!(2)谈谈你对static的理解(C部分,或者C++部分)。考点分析:(1)C语言基础知识。static。(2)是否深究技术细节。解题思路:       static定义的数据存放的区域,怎么初始化?以及它的生存周期和作

2015-01-23 10:21:22 374

原创 类与对象:类的组合

在对现实中的某些事物抽象成类时,可能会形成很复杂的类,为了更简洁的进行软件开发,我们经常把其中相对比较独立的部分拿出来定义成一个个简单的类,这些比较简单的类又可以分出更简单的类,最后由这些简单的类再组成我们想要的类。比如,我们想要创建一个计算机系统的类,首先计算机由硬件和软件组成,硬件又分为CPU、存储器等,软件分为系统软件和应用软件,如果我们直接创建这个类是不是很复杂?这时候我们就可以将CPU写

2015-01-22 11:15:55 983

原创 堆栈

2015-01-21 21:45:45 264

原创 最大子列和问题(分治法和在线处理)

时间复杂度太大,该算法不可取。        该时间复杂度为O(N),一般遇到为次复杂度的可以考虑改进算法,使其复杂度为O(logN),将会有大的改善。分治法在每一层递归上都有三个步骤:分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题;解决:若子问题规模较小而容易被解决则直接解,否则递归地解各个子问题;

2015-01-16 21:08:56 881

原创 二分法(算法)

查找算法中的“二分法”是这样定义的:      给定N个从小到大排好序的整数序列List[],以及某待查找整数X,我们的目标是找到X在List中的下标。即若有List[i]=X,则返回i;否则返回-1表示没有找到。      二分法是先找到序列的中点List[M],与X进行比较,若相等则返回中点下标;否则,若List[M]>X,则在左边的子系列中查找X;若List[M]

2015-01-16 20:03:08 710

原创 类与对象:构造函数和析构函数

某个类的对象之间都有哪些不同呢?首先是对象名不同,其次就是对象的数据成员的值不同。我们在声明一个对象时,也可以同时给它的数据成员赋初值,称为对象的初始化。       1.构造函数       我们在声明一个变量时,如果对它进行了初始化,那么在为此变量分配内存空间时还会向内存单元中写入变量的初始化。声明对象有相似的过程,程序执行时遇到对象声明语句时会向操作系统申请一定的内存空间来存

2015-01-15 20:26:14 900

原创 链式存储面试题-单链表反转

出现位置:第一轮基础类笔试或技术一面难度系数:中面试题目:实现一个单链表的反转。例如:10   9   8   7   6   5   4   3   2   1反转后应该为:1   2   3   4   5   6   7   8   9   10要求10分钟内写出代码,注意代码风格及时间复杂度/空间复杂度。考点分析:(1)基本概念:链表基础,代码规

2015-01-14 20:58:57 401

原创 重载函数与函数模板

一.重载函数      现实生活中的一个词可能有多种含义,比如,洗衣服、洗头、洗车,都有一个洗字,但是他们的操作方式是不一样的。函数也一样,有时候它们的操作不完全一样但是名字一样,这就是重载函数。      重载函数就是,两个以上的函数取相同的函数名,但是函数形参的个数或者类型不同,编译器会根据实参与形参的类型和个数进行最佳匹配,自动确定调用哪一个函数。      为什么要

2015-01-14 13:10:51 471

原创 函数的参数传递与内联函数

一.函数的参数传递       函数参数的传递有两种方式,值调用和引用调用。       1.值调用        值调用就是调用函数时,给形参分配内存空间,将实参拷贝给形参,之后的函数执行中形参和实参就脱离了关系,谁都不影响谁。也就是值调用时,只是用实参的值初始化下形参,之后两者互不影响。        例子:        #include     

2015-01-14 10:45:37 408

原创 递归调用

递归调用就是函数直接或间接的调用自身。调用自身就是指在一个函数的函数体中出现了对自身的调用语句。直接调用自身如:void  fun(void)  { ...; fun(); ...}。间接调用自身如:void fun1(void) { ...; fun2(); ...}  void fun2(void)  { ...; fun1(); ...},这里fun1调用了fun2,fun2又调用了fu

2015-01-14 10:18:15 343

原创 自定义数据类型

什么是自定义数据类型呢?像char、int、float等类型这些都是C++内置的基本数据类型,这些数据类型是不能满足我们在编程中的要求的,需要自己定义一些数据类型使用。自定义数据类型有:枚举类型、结构类型、联合类型、数组类型和类等       1.枚举类型       我们在现实当中经常遇到这种情况,描述一件事情时只能取几个有限的值,比如,一周只有星期一、星期二...星期日七天,比赛结果只

2015-01-11 18:49:17 596

原创 动态链接库(从DLL中导出C++类)

以Dll1为例,打开Dll1工程,在Dll1.h文件中添加如下代码:  class Dll1_API Point{public:    void output(int x,int y);};        为了从动态链接库中导出一个类,需要在class和类名之间加入导出标识符,这样就可以导出整个类了。如果该类的某个函数访问权限是private,那么外部程序仍无法访问该函数。

2015-01-07 16:04:51 658

原创 动态链接库(Win32 DLL的创建和使用)

2015-01-07 15:58:42 330

原创 MFC中如何生成release版本

VC6.0发布版需要两个地方都设置静态链接库:1.project->settings->general->Microsoft Foundation Classes:Use MFC in a Static Library.2.在菜单栏或工具栏的空白处点右键选择Build->Win32 Release.这两个地方都设置好后,编译一下就可以了。

2014-11-25 14:06:36 2357

word2007转PDF插件

安装word2007后,直接安装此软件即可将word转成pdf

2014-08-13

空空如也

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

TA关注的人

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