![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++开发
文章平均质量分 63
ForestRound
这个作者很懒,什么都没留下…
展开
-
Visual C++ 编程深入 使用ODBC数据库
Visual C++ 提供提供了多种数据库访问技术,其中最主要的是开放式数据库连接(Open Database Connectivity, ODBC)和数据存取对象(Data Access Object, DAO)两种数据库访问技术。ODBC是技术上成熟的可靠标准接口,这里介绍它的使用。 1. ODBC概述ODBC建立了一组数据库访问规范,为用户提供简单、标准、透明和统一的数据原创 2016-10-04 09:46:48 · 2228 阅读 · 0 评论 -
C++ 多态和虚函数
多态:不同类的对象对同样的消息可能调用不同的方法。“一个接口,多种实现”。1 基类指针指向派生类对象根据C++指针的定义,一种类型的指针不能指向另一种类型的变量(void*是通用变体,没有特定类型),但对于基类的指针和派生类的对象是个例外。实现虚函数的前提条件:基类的指针可以指向其派生类的对象,反过来不可以。实际上,这种情况下,基类的指针通过指针也只能访问派生类中从基类继承而来的原创 2016-10-03 16:12:40 · 332 阅读 · 0 评论 -
C++ 虚基类
使用多继承,容易产生二义性。1. 当派生类的多个直接基类中某个成员名称相同,派生类访问这个成员时,如果不指定基类名,编译器无法判断该成员来自哪一个基类。class Base1{ protected: int a; public: void set(int x):a(x){}};class Base2{ protected: int a; //与Base1的成员a同名原创 2016-10-03 12:43:12 · 1231 阅读 · 0 评论 -
C++ 派生类的构造函数和析构函数
基类的构造函数和析构函数不能被继承,基类成员的初始化只能在基类的构造函数中进行。派生类的数据成员包括基类的数据成员和派生类自身新增的数据成员。1. 当创建一个派生类对象时,派生类的构造函数必须首先通过调用基类的构造函数来对基类的数据成员进行初始化,然后再执行派生类构造函数的函数体,对派生类新增的数据成员进行初始化。当派生类对象的生存期结束时,析构函数的调用顺序相反。2.原创 2016-10-03 11:36:56 · 4869 阅读 · 0 评论 -
C++ 继承与多态
派生类继承基类(又称父类、超类)的属性和方法,在此基础上可以进行修改或添加新的属性和方法。class [] 为了保护基类的数据封装性,无论哪种继承方式,积累的私有成员在派生类中都是不可见的。1. public继承基类的访问权限在派生类中不变。公有还是公有,保护还是保护,派生类成员函数可以访问基类的非私有成员,派生类的对象可以直接访问基类的公有成员。2. pri原创 2016-10-03 10:58:06 · 348 阅读 · 0 评论 -
C++ 在初始化列表中初始化和在构造函数内初始化的区别
普通构造函数函数体内初始化:(事实上都是先初始化阶段再计算阶段)#include using namespace std;class A{ public: A() // 无参构造函数 { cout << "Construct A" << endl ; } A(const A& ObjA) // 拷贝构造函数 { cout a = ObjA.a; } A& o原创 2016-10-03 10:32:09 · 2233 阅读 · 0 评论 -
C++ 常对象和常成员函数
常对象:不能修改的对象。“只读”。使用const声明,声明时必须初始化。格式: const 类名 对象名 (初始化列表) 类名 const 对象名 (初始化列表)const Point p(100,200); 常成员函数只能访问数据成员而不能设置或修改数据成员。返回类型 函数名 (形参表)const;const成员函数只能调用c原创 2016-10-03 09:46:52 · 1362 阅读 · 0 评论 -
C++ 友元 friend
友元:打破数据隐藏机制,能够在类的外部访问该类的私有成员。包括友元函数和友元类。友元函数:必须在类的定义中声明,前面必须加friend关键字。与一般成员函数区别:友元函数需要通过对象访问类的成员(一般成员函数直接访问),而为了能够访问或修改类的私有成员,一般以该类的对象的引用作为函数参数。友元声明可以放在类定义的任何地方,不受访问权限控制符的影响。#include #原创 2016-10-03 09:25:54 · 406 阅读 · 0 评论 -
C++ 组合类
组合类:一个类里面的数据成员是另一个类的对象,即内嵌其他类的对象作为自己的成员。创建组合类的对象:首先创建各个内嵌对象,难点在于构造函数的设计。创建对象时既要对基本类型的成员进行初始化,又要对内嵌对象初始化。示例#include #include using namespace std;class Point{ private: int x, y; publ原创 2016-10-03 08:58:20 · 26803 阅读 · 2 评论 -
C++ 虚析构函数
创建派生类的对象:先调用基类构造,再调用子类构造。不能把构造函数定义为虚函数。删除派生类的对象:先调用派生类的析构函数,再调用基类的。问题:如果是动态绑定,基类的指针所指向的派生类的对象是通过new在堆上创建的,使用delete运算删除派生类对象,则只调用了基类的析构函数,而没有调用派生类的析构函数,这样就无法完成正确的对象清理工作(正确应该是要调用派生类的析构函数)。解决办法:把析构原创 2016-10-03 16:35:33 · 407 阅读 · 0 评论 -
C++ 纯虚函数
声明:virtual () = 0; // 没有花括号纯虚函数:不给出函数的实现代码,没有函数体,仅为类族提供统一的接口,相当于标准接口。在派生类中如果给出了纯虚函数的具体实现,该函数在派生类中就成为一般的虚函数。注意将纯虚函数和函数体为空的虚函数区分开。一般而言,基类和派生类都可以用来声明相应类的对象。但也可以根据需要,把基类作为纯粹的一种抽象概念,即把他的一些行文(原创 2016-10-03 17:08:49 · 782 阅读 · 0 评论 -
C++ 重载
重载:函数重载,运算符重载区别于虚函数的动态绑定(运行时多态),重载属于静态绑定(编译时多态)。重载:在函数名(包括运算符)相同的情况下,编译器能够根据不同的参数类型确定对应的函数。1. 函数重载函数名相同,参数类型不同。(同一个类中)成员函数也可以重载。常成员函数和普通成员函数可以以重载的形式共存(这也是之前强调声明和定义必须带const的原因,否则会被当原创 2016-10-03 17:52:11 · 596 阅读 · 0 评论 -
Visual C++ 之 调试程序
一、Debug调试器发布版本没有调试信息,不能进行程序调试,但程序进行了优化,DEBUG版本则包含调试信息(在Debug文件夹),但没有优化。所以程序有时候能够在调试版本运行,但不能运行于发布版本。编程时一般先生成一个Debug版本程序,程序在经过调试确认无误后,再编译链接生成一个Release版本程序。调试工具:1. 调试窗口用于显示程序的调试信息。Output窗口:原创 2016-10-05 11:39:09 · 4283 阅读 · 0 评论 -
Visual C++ 之 多线程
Windows的线程调度:Windows对CPU的管理采用时间片分配的方式,系统通过时间片调度按优先级轮流执行系统中的线程。系统需要处理的线程很低的时候,等待时间长,响应性能不够。对时间响应和处理要求较高的场合下,用多线程的方法来设计应用程序是一种普遍采用的方法。进程:程序的一个运行实例,可以把进程看成一个运行中的应用程序。描述了应用程序的一个运行实例所拥有的资源。包括:地址空间、文件原创 2016-10-04 11:35:46 · 797 阅读 · 0 评论 -
Visual C++ 之 动态链接库
动态链接库是基于提高系统内存资源的使用效率的解决办法。为提高内存资源的使用效率,每一个程序都应该尽量少占用内存空间,在多任务环境下,同时运行的多个应用程序有时要调用相同的函数(尤其是一些统一的接口),比如标准的数学函数和windows环境下的窗口维护函数等等。因此,设想当多个应用程序同时运行并且都调用同一个函数时,不应该在内存上生成这个函数的多份拷贝,而应该使这些程序能够共享这个函数在内存中的原创 2016-10-04 10:24:02 · 882 阅读 · 0 评论 -
Visual C++ 之 MFC异常宏和异常类
MFC对C++异常处理结果try-catch进行了改进,以宏的形式支持异常处理功能,定义了MFC异常宏和MFC异常类。MFC异常宏将发生的异常情况与MFC类联系在一起,以便能够分类检测并抛出不同类型的异常,方便程序员进行不同的处理。灵活性、广泛性、可执行性更好。MFC异常宏:TRY{ ... //引发异常}CATCH(ExceptionClass1, pe){ ... //原创 2016-10-04 10:04:30 · 784 阅读 · 0 评论 -
Visual C++ 之 文件操作
考虑文档数据的存储,在VC++中可以采用3种方法实现磁盘的读写处理:1. 采用C++文件流(包括ifstream, ofstream, fstream等)方法处理文件;2. 将文件作为MFC类CFile的一个对象进行处理;3. 利用MFC类CArchive对文档进行序列化处理在MFC应用程序中一般采用序列化方法进行文档的读写,这样可以避免直接处理一个物理文件。1原创 2016-10-04 00:40:34 · 2603 阅读 · 0 评论 -
Visual C++ 之 常用的MFC类
1. CRuntimeClass 类CRuntimeClass结构包含了类名、对象所占存储空间大小以及类的版本号等成员变量和动态对象创建、派生关系判断等成员函数。2. COject类MFC的根类(抽象基类)。描述MFC类的公共特性。对象诊断(1)利用成员函数AssertValid()进行对象有效性检查,使对象可以在程序继续运行前对数据成员的有效性进行判断。(2)利用成员函数原创 2016-10-04 07:49:39 · 1338 阅读 · 0 评论 -
Visual C++ 之 使用对话框
一般定义自己的对话框类时使用CDialog类作为基类。一般对话框的工作流程原创 2016-10-04 00:32:27 · 1332 阅读 · 0 评论 -
C++ 模板
C++模板:函数模板、类模板模板是一个将数据类型参数化的程序设计工具。代码与数据类型相脱离。将数据类型作为模板参数,在使用模板时再根据实参的数据类型确定模板参数(即数据类型)。代码可重用,特别是函数参数或者数据成员的类型多样而函数的类的功能相同时。1. 函数模板template // 或者 template T abs( T val){原创 2016-10-03 18:09:07 · 332 阅读 · 0 评论 -
C++ 类的静态成员
静态成员:静态数据成员、静态成员函数静态数据成员:不破坏数据隐藏的前提下,解决不同对象之间数据共享的问题(比如对象计数器等)静态成员函数:专门用于访问静态数据成员的成员函数。(其他的不行)静态数据成员实例属性:不同对象具有不同的属性值(在内存中各有一份拷贝);类属性:对每个对象都是相同的,只有唯一拷贝。比如当前已创建对象的数量。(C++通过静态数据成员来实现类属性)原创 2016-10-02 23:05:00 · 835 阅读 · 0 评论 -
C++ this指针
this指针:用来指向当前对象。每个非静态成员函数都隐藏有一个this指针的函数参数。当一个对象调用成员函数时,编译器要把当前对象的地址传递给this指针。void Time::showTime(){ cout << hour << ':' << minute << ':'<<second << endl;}等同于void Time::showTime(Time* const thi原创 2016-10-02 22:28:28 · 328 阅读 · 0 评论 -
C++ 类的构造函数和析构函数
构造函数:数据成员初始化(可带参数,无返回类型)析构函数:对象删除前执行一些清理善后和数据保存工作。(无参数和返回类型)均为自动调用。如果不提供两者定义时,编译器默认添加默认的构造函数和析构函数,执行空操作。当创建一个对象时(包括声明一个对象和利用new动态创建对象),系统先根据类定义的数据成员为对象分配内存空间,然后自动调用对象的构造函数对分配的内存空间进行初始化处理,从而完原创 2016-10-02 09:42:25 · 891 阅读 · 0 评论 -
C++ TUTORIAL - MEMORY ALLOCATION - 2016
C++ TUTORIAL - MEMORY ALLOCATION - 2016 作者:K Hong Ph.D. / Golden Gate Ave, San Francisco / Seoul National Univ / Carnegie Mellon / UC Berkeley / DevOps / Deep Learning / VisualizationVariabl翻译 2016-10-01 10:25:05 · 1806 阅读 · 0 评论 -
[转载]Dynamic Memory Allocation and Fragmentation in C and C++
原文链接 Dynamic Memory Allocation and Fragmentation in C and C++Dynamic Memory Allocation and Fragmentation in C and C++Colin Walls, Mentor GraphicsNewbury UKAbstract:In C and C++翻译 2016-10-01 10:28:58 · 860 阅读 · 0 评论 -
Storage Classes in C++ Programming
原文链接:Storage Classes in C++Storage Classes in C++ ProgrammingStorage class of a variable defines the lifetime and visibility of a variable. Lifetime means the duration till w翻译 2016-10-01 10:36:47 · 535 阅读 · 0 评论 -
C++ 函数作用域
变量作用域局部作用域、全局作用域、文件作用域 局部变量:也称内部变量,声明在函数内(包括main函数),作用域开始于变量声明之处,结束于函数或块结束处; 全局变量:也称外部变量,声明在函数外,作用域一般是整个程序源文件,作用域最广,甚至可以作用于组成该程序的所有源文件(比如,将多个独立编译的源文件链接成一个程序时,在某个源文件中声明的全局变量,在与该源文件相链接的其他源文件中也原创 2016-10-01 11:42:13 · 9308 阅读 · 2 评论 -
C++ 动态分配内存
静态方法:变量所占的内存空间不需要程序员自己管理,编译器在编译阶段自动将管理这些空间的代码加入到目标文件中,程序运行时,由操作系统自动为变量分配内存单元,在变量的生存期内,变量一直占用内存单元,在生存期结束后自动释放内存单元。特点是大小固定,不能扩展。问题:有些程序必须在运行时才能确定需要多少内存空间来存储数据...解决:使用动态分配内存方法。动态分配内存:程序运行时根原创 2016-10-01 15:16:47 · 3434 阅读 · 0 评论 -
malloc和new区别
转自:http://blog.csdn.net/zjc156m/article/details/168193571. malloc()函数1.1 malloc的全称是memory allocation,中文叫动态内存分配。原型:extern void *malloc(unsigned int num_bytes); 说明:分配长度为num_bytes字节的内存块。如果分配成转载 2016-10-01 15:39:59 · 451 阅读 · 0 评论 -
Wild pointer, NULL pointer, generic pointer and dangling pointer
【转载】原文链接 http://www.everybrickmatters.com/2013/11/wild-pointer-null-pointer-generic.htmlWild Pointer , NULL Pointer , Generic Pointer and Dangling Pointer in CPosted by: Admin Categories: CWil翻译 2016-10-01 16:24:41 · 520 阅读 · 0 评论 -
void* 指针、NULL指针、零指针、野指针、悬垂指针
原文链接:http://www.jianshu.com/p/2062bf912a59字数305 阅读173 评论0 喜欢3void* 类型指针:通用变体类型指针;可以不经转换,赋给其他指针,函数指针除外;malloc返回的就是void*类型。NULL指针:是一个标准规定的宏定义;#define NULL ((void *) 0) 用来表示空指针常量;零指针转载 2016-10-01 16:31:13 · 892 阅读 · 0 评论 -
C/C++内存管理详解[转载]
这篇文章在内存分配方式和常见错误及对策方面写得很好,本来想只贴链接,但是怕以后链接失效还是先转载一下。C/C++内存管理详解[转载]作者:PingPong 文档来源:CSDN程序员们经常编写内存管理程序,往往提心吊胆。如果不想触雷,唯一的解决办法就是发现所有潜伏的地雷并且排除它们,躲是躲不了的。本文的内容比一般 教科书的要深入得多,读者需细心阅读,做到真正地通晓内存管理。转载 2016-10-01 10:06:04 · 358 阅读 · 0 评论 -
C++ 内联函数
内联函数 inline function 使用内联函数的原因:调用函数时,系统要进行中断调用函数,保存现场,执行被调用函数,返回调用函数,恢复现场一系列的现场处理工作。如果被调用函数自身代码很短,而且频繁被调用,则在整个函数调用过程中,附加的现场处理所占的时间开销比重会很大。因此,把函数体直接嵌入函数调用处,则可消除附加的现场处理时间开销,提高运行效率。内联函数的机制:在程原创 2016-10-01 09:27:15 · 452 阅读 · 0 评论 -
C++ 函数参数
C++函数 函数的参数传递方式:按值传递、按地址传递、按引用传递值传递最简单,是一种单向的参数传递方式,也就是说传递过程中产生一个副本,只把实参的值传递给形参,传递完成以后副本的工作也就结束了,实参不再与形参有联系,进入函数体后整个函数生命周期内只有形参在起作用。形参在函数内的变化不会影响实参,实参的值在函数调用后不会发生改变。 如果希望被调函数改变主调函数中实参的值,可以采用原创 2016-10-01 09:26:01 · 880 阅读 · 0 评论 -
面向对象程序设计 特征
面向过程程序设计方法(结构化程序设计):自顶向下,逐步求精。复杂问题按功能划分为子模块。系统是实现模块功能的子程序的集合。POP:算法+数据结构 = 程序数据和过程分离,代码的可重用性差。面向对象程序设计:通过对象的属性和行为描述对象。类定义了同类对象的公共属性和行为。类 = 数据结构 + 对数据进行操作的函数OOP:把复杂的系统分解成多个更小的对象组成。这些对象可在其他程原创 2016-10-02 08:46:37 · 702 阅读 · 0 评论 -
Visual C++ 开发(一) 入门
Visual C++是常用的一种windows编程工具,是微软日益成熟的可视化软件开发平台,可用于编写C、C++和C++/CLI程序。 概述Visual C++不是简单的C++编译器,而是一个由编辑器、编译器、调试器以及程序向导AppWizard、类向导ClassWizard等组件集成的一个可视化开发环境。 特点Visual C++ 源程序可以采用标准C++和扩展C++\C原创 2016-09-30 11:08:41 · 1174 阅读 · 0 评论 -
C++ 基本内置数据类型
C++数据类型:基本数据类型、指针类型和构造类型 基本数据类型:整型(长整型、短整型等)、字符型、实数类型(单精度、双精度等)、布尔型、空值型(void)构造类型:数组、结构、枚举指针类型:属于复合类型,需要结合所指向对象的类型来定义 预备知识:计算机处理器的通用寄存器通常都是8-bits,1字节(byte)= 8 bits, 访问内存是按字节寻址;机器字(ma原创 2016-09-30 15:17:07 · 2662 阅读 · 0 评论 -
C++ 变量类型
字面常量 literal字符字面常量: ‘a’,‘,’‘ ’...字符串字面常量: “hello world”,... 区别:单引号:字符字面常量,‘A’:代表单个字符A双引号:字符串字面常量,“A”代表1个含有2个字符型元素的数组,A和null character Reference 引用:alias别名,对引用的操作就是对本尊的操作,使用一个取引用符原创 2016-09-30 16:15:05 · 290 阅读 · 0 评论 -
C++数组
C++数组 声明:一维数组: 数据类型> 数组名> [常量表达式],常量表达式表示数组每一维所包含元素的个数。二维数组: 数据类型> 数组名> [常量表达式][常量表达式] 访问:数组名> [下标表达式]数组名> [下标表达式][下标表达式]下表从0开始比如 int intArr[30],就从intArr[0]到intArr[29],编译器为这个数组分配原创 2016-09-30 16:15:40 · 265 阅读 · 0 评论 -
C++ 指针
指针类型指针类型是复合类型:a pointer points to an object of some other type主要两种使用情况:1. 当我们解除指针的引用(在指针变量前加*号),我们得到了指针所指向的对象;2. 当我们使用自增操作符(在后面++),我们就使得指针前进以表示数组的下一个元素。所以,dereference和increment操作符,使用在指针上和使用在原创 2016-09-30 17:44:13 · 392 阅读 · 0 评论