C++ 语言
读书与远方
这个作者很懒,什么都没留下…
展开
-
编程规范
原创 2017-11-12 15:04:41 · 357 阅读 · 0 评论 -
C++之多态性与虚函数
面向对象程序设计中的多态性是指向不同的对象发送同一个消息,不同对象对应同一消息产生不同行为。在程序中消息就是调用函数,不同的行为就是指不同的实现方法,即执行不同的函数体。也可以这样说就是实现了“一个接口,多种方法”。 从实现的角度来讲,多态可以分为两类:编译时的多态性和运行时的多态性。前者是通过静态联编来实现的,比如C++中通过函数的重载和运算符的重载。后者则是通过动态联编来实现的,在C++原创 2013-12-11 10:30:06 · 683 阅读 · 0 评论 -
C++之继承与派生(3)
大家都知道C#和C++重要的区别之一就是,C#支持单一继承和多接口继承,而C++则允许多继承。至于哪一个比较好,在这里就不去评价了。今天所要说的重点内容就是C++的多重继承以及虚基类。 1.前一节我介绍了有关单继承的内容,实际上,一个派生类可能会继承于两个或多了基类,那么这样的派生方法称为多基派生或多重继承。它声明的一般格式: class 派生类名:继承方式1 基类名1, 继承原创 2013-12-11 10:29:57 · 616 阅读 · 0 评论 -
C++之继承与派生(2)
继承是面向对象程序设计中的重要特性,是软件复用的一种形式。其实继承和派生就是同一种概念的不同说法罢了,通常我们说子类继承父类,父类派生出子类。说实话,学习和了解了C++的继承与派生后,发现我对面向对象中的继承与派生有了更深刻的理解。在更加深入了解C++关于继承方面的知识之前,我想先讲一下C++中派生与继承的基本概念,它是之后学习派生类的构造与析构,以及多重继承等的基础。 1.派生类的声明原创 2013-12-11 10:28:33 · 654 阅读 · 0 评论 -
C++ 拷贝构造函数赋值构造函数
拷贝构造函数和赋值构造函数的异同由于并非所有的对象都会使用拷贝构造函数和赋值函数,程序员可能对这两个函数有些轻视。请先记住以下的警告,在阅读正文时就会多心:如果不主动编写拷贝构造函数和赋值函数,编译器将以“位拷贝”的方式自动生成缺省的函数。倘若类中含有指针变量,那么这两个缺省的函数就隐含了错误。以类String的两个对象a,b 为例,假设a.m_data 的内容为“hello”,b原创 2013-12-11 10:30:31 · 699 阅读 · 0 评论 -
C++之继承与派生(1)
上一节,主要讲解了有关派生类继承方式的内容。那么今天就来说说派生类的构造函数和析构函数,以及怎么样在派生类中显式访问积累成员。大家都知道,基类的构造函数和析构函数是不能被继承的,因此我们必须在派生类的构造函数中对基类的构造函数所需要的参数进行设置。同样,对于派生类对象的清理工作也需要加入新的析构函数。 1.那么该如何构造呢?对于简单的派生类,即只有一个基类,且直接派生(多继承将在后续几节原创 2013-12-11 10:29:49 · 603 阅读 · 0 评论 -
extern、头文件、源文件与编译和链接
键字:extern 、头文件、源文件编译、全局变量的定义谈到extern(这里只谈论同一语言编译情况下的extern,不考虑C++与C混合编译情况下的extern,因为extern在这两种情况下的功能是不同的)与头文件,不得不谈编译与链接。extern的作用与头文件基本等同,都是为编译器服务的。但头文件使用更方便一些。尤其是在做一个大的项目,很多函数和全局变量一个个extern到每原创 2013-11-15 13:03:37 · 892 阅读 · 0 评论 -
回调函数
回调函数:回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。回调函数使得调用者与被调用者之间得以分开。这样一来,调用者不必关心谁是被调用者,所有它需知道的,只是存在一个具有某种特定原型原创 2013-11-15 13:03:18 · 618 阅读 · 0 评论 -
c++模板详解
c++ 模板分为2类:1. 函数模板格式:template 反回类型函数名(参数列表){函数体}比如:template void swap(T& a, T& b){} 调用时:int a,b;swap(a,b); double d1,d2;swap(d1,d2); 但是下面写法是错误的:swap(int,int):不能在函数调用的参数中原创 2013-11-13 11:05:33 · 1082 阅读 · 0 评论 -
32位机和64位机编程时应该注意些什么
|字号 订阅1.数据类型在各种机器中所占的字节数不同16位平台char 1个字节8位short 2个字节16位int 2个字节16位long 4个字节32位指针 2个字节32位平台char 1个字节8位原创 2013-11-27 14:24:40 · 588 阅读 · 0 评论 -
C++虚析构函数、虚函数结合考题变种
虚析构函数、虚函数结合考题变种 1.[Effective c++原则07]:为多态基类声明virtual 析构函数。 [如果不]: 如果不声明为析构函数,可能出现的结果如下:Derived对象的成分没有被销毁,形成资源泄露、在调试上会浪费很长时间。 class CSimpleClass{public:CSimpleClass(){ cout ~CSimpleCla原创 2013-11-27 14:23:35 · 717 阅读 · 0 评论 -
C++中的虚函数总结
对C++ 了解的人都应该知道虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的。简称为V-Table。 在这个表中,主是要一个类的虚函数的地址表,这张表解决了继承、覆盖的问题,保证其容真实反应实际的函数。这样,在有虚函数的类的实例中这个表被分配在了 这个实例的内存中,所以,当我们用父类的指针来操作一个子类的时候,这张虚函数表就显得由为重要了,它就像一原创 2013-11-27 14:16:53 · 764 阅读 · 0 评论 -
深入浅出C++虚函数表
为什么要了解虚函数表了解虚函数表对理解C++实现多态的机制会有更深的了解,对对象的内存布局会有更好的认识。 验证虚函数表的存在(C++中的struct和class实际上是一样的)C++中当一个类中存在virtual函数(虚函数)或者它的父类中存在虚函数,那么编译器就会为这个类生成虚函数表(virtual table),下面我用代码来验证这个事情。首先写一个classcl原创 2013-11-27 14:16:05 · 608 阅读 · 0 评论 -
怎样获得虚函数指针
先还是看看下面的代码: #include using namespace std; class A{private: int a; int b;public: virtual void vfun0() { cout "A::vfun0"原创 2013-11-27 14:13:56 · 601 阅读 · 0 评论 -
C++模板学习
C++模板学习1. 模板的概念。我们已经学过重载(Overloading),对重载函数而言,C++的检查机制能通过函数参数的不同及所属类的不同。正确的调用重载函数。例如,为求两个数的最大值,我们定义MAX()函数需要对不同的数据类型分别定义不同重载(Overload)版本。//函数1.int max(int x,int y);{return(x>y)?x:y ;}原创 2013-11-13 10:53:27 · 463 阅读 · 0 评论 -
类中静态回调函数应用
提出问题: 回调函数是基于C编程的Windows SDK的技术,不是针对C++的,程序员可以将一个C函数直接作为回调函数,但是如果试图直接使用C++的成员函数作为回调函数将发生错误,甚至编译就不能通过。分析原因:普通的C++成员函数都隐含了一个传递函数作为参数,亦即“this”指针,C++通过传递一个指向自身的指针给其成员函数从而实现程序函数可以访问C++的数据成员。这也可以理解为原创 2013-11-13 09:53:13 · 905 阅读 · 0 评论 -
俄罗斯方块 C++ 源代码实现
第一个Cpp#include #include #include#include #include #pragmacomment(lib,"winmm.lib") //播放背景音乐的头文件#include "colorConsole.h"#include#define SQUARE_COLORBACKGROUD_BLUE|BACKGROUD_RED原创 2013-11-25 10:31:57 · 2354 阅读 · 0 评论 -
扫雷 MFC实现
1. 1. 游戏实现 扫雷,是附带在Window里面的游戏,是个简单的游戏。因此我们就从扫雷开始我们的游戏旅程。很多人都玩过这个游戏,只是不知道怎么用程序实现。不过还有人不知道怎么玩,下面就先说说游戏的规则: ● 开始:按左键开始游戏,按按钮或菜单重新开始。● 左键:按下时,是雷则结束,非雷则显示数字。● 数字:代表此数字周围一圈八原创 2013-11-25 10:33:04 · 4569 阅读 · 1 评论 -
C++之运算符重载(1)
在前一节中曾提到过,C++中运行时的多态性主要是通过虚函数来实现的,而编译时的多态性是由函数重载和运算符重载来实现的。这一系列我将主要讲解C++中有关运算符重载方面的内容。在每一个系列讲解之前,都会有它的一些基础知识需要我们去理解。而运算符重载的基础就是运算符重载函数。所以今天主要讲的是运算符重载函数。 1.运算符重载是对已有的运算符赋予多重含义,使同一个运算符作用域不同类型的数据导致不原创 2013-12-11 10:30:15 · 662 阅读 · 0 评论 -
C++之运算符重载(2)
上一节主要讲解了C++里运算符重载函数,在看了单目运算符(++)重载的示例后,也许有些朋友会问这样的问题。++自增运算符在C或C++中既可以放在操作数之前,也可以放在操作数之后,但是前置和后置的作用又是完全不同的(q前置运算符:先加1,再赋值;后置运算符:先赋值,再加1)。那么要怎么重载它们,才可以有效的区分开来呢?今天我就来说说C++中是怎么处理前置运算符和后置运算符的重载的。以及介绍一下插入运原创 2013-12-11 10:30:27 · 642 阅读 · 0 评论 -
解决bin/sublime.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform问题
分类: J2ME Java2011-05-31 08:27 17018人阅读 评论(5) 收藏 举报虚拟机eclipse平台c错误:java.lang.UnsatisfiedLinkError: C:/WTK2.5.2_01/bin/sublime.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform问题所在原创 2014-03-02 10:49:11 · 2265 阅读 · 0 评论 -
从 C/C++ 程序调用 Java 代码
011-10-26 16:57 2157人阅读 评论(6) 收藏 举报javajnijvmpathc语言JNI允许您从本机代码内调用 Java 类方法。要做到这一点,通常必须使用 Invocation API 在本机代码内创建和初始化一个 JVM。下列是您可能决定从 C/C++ 代码调用Java 代码的典型情况: 1.希望实现的这部分代码是平台无关的,它将用于跨多原创 2014-03-02 10:49:03 · 876 阅读 · 0 评论 -
图像基本处理算法的简单实现(二)
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://vaero.blog.51cto.com/4350852/823000 图像基本处理算法的简单实现(一) 图像基本处理算法的简单实现(二) 4)膨胀腐蚀 属于什么心态学==,膨胀、腐蚀、击中/击不中变换、细化…(又晕了T^T)。简原创 2014-01-09 14:23:18 · 1089 阅读 · 0 评论 -
Android二值化算法
博客分类: Android图像处理 网上找了很多,没有一个能用的,本文的方法是自己在别人的基础上修改而来,纯Java算法,效率没有C++的高,追求效率的可以用Jni,具体参考:http://vaero.blog.51cto.com/4350852/822997 感谢网上分享的朋友们! 有图有真相: 接下来直接上代码: Java代码原创 2014-01-09 14:27:29 · 1180 阅读 · 0 评论 -
图像基本处理算法的简单实现(三)
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://vaero.blog.51cto.com/4350852/823004 图像基本处理算法的简单实现(一) 图像基本处理算法的简单实现(二) 图像基本处理算法的简单实现(三) 书内叙述的细化算法:/** * 对二值化Bitmap进行细化运算后原创 2014-01-09 14:24:01 · 854 阅读 · 0 评论 -
图像基本处理算法的简单实现(一)
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://vaero.blog.51cto.com/4350852/822997 图像基本处理算法的简单实现(一)一、引言 图像处理基本算法整理。 拿来举例的实现代码是在JNI方法内直接实现的,且传入参数为int[]颜色值,返回为原创 2014-01-09 14:22:10 · 882 阅读 · 0 评论 -
Fatal signal 11 (SIGSEGV) at 0xdeadbaad (code=1) 错误 解决方案(android-ndk)
分类: JNI2013-05-07 19:42 5301人阅读 评论(0) 收藏 举报在android里做ndk编程的时候,碰到个随机性错误错误信息如下:05-06 15:59:44.411: A/libc(3347): Fatal signal 11 (SIGSEGV) at 0xdeadbaad (code=1)05-06 15:59:44.911: I/DEBUG(3原创 2013-12-23 16:51:53 · 1330 阅读 · 0 评论 -
拷贝构造函数与赋值函数;深拷贝,浅拷贝
订阅在面向对象程序设计中,对象间的相互拷贝和赋值是经常进行的操作。 如果对象在申明的同时马上进行的初始化操作,则称之为拷贝运算。例如: class1 A("af"); class1 B=A; 此时其实际调用的是B(A),拷贝构造函数。 如果对象在申明之后,在进行的赋值运算,我们称之为赋值运算。例如:原创 2013-12-20 22:05:11 · 877 阅读 · 0 评论 -
拷贝构造函数的参数为什么必须使用引用类型
在C++中, 构造函数,拷贝构造函数,析构函数和赋值函数(赋值运算符重载)是最基本不过的需要掌握的知识。 但是如果我问你“拷贝构造函数的参数为什么必须使用引用类型?”这个问题, 你会怎么回答? 或许你会回答为了减少一次内存拷贝? 很惭愧的是,我的第一感觉也是这么回答。不好还好,我有理性这个好品质。思索一下以后,发现这个答案是不对的。让我来撕开(有点暴力,但是我喜欢,嘿嘿--龇牙)那件隐藏在真理外的原创 2013-12-19 08:54:00 · 692 阅读 · 0 评论 -
C++ 重写重载重定义区别
用的时候老是忘记。特此记下。重载overload:是函数名相同,参数列表不同 重载只是在类的内部存在。但是不能靠返回类型来判断。重写override:也叫做覆盖。子类重新定义父类中有相同名称和参数的虚函数。函数特征相同。但是具体实现不同,主要是在继承关系中出现的 。重写override需要注意:1 被重写的函数不能是static的。必须是virtual的原创 2013-11-01 16:47:24 · 626 阅读 · 0 评论 -
OpenMP并行程序设计
1、fork/join并行执行模式的概念2、OpenMP指令和库函数介绍3、parallel 指令的用法4、for指令的使用方法5 sections和section指令的用法1、fork/join并行执行模式的概念OpenMP是一个编译器指令和库函数的集合,主要是为共享式存储计算机上的并行程序设计使用的。前面一篇文章中已经试用了Ope原创 2013-12-13 09:15:54 · 1474 阅读 · 0 评论 -
OpenMP
1 简介www.openmp.orgGNU的gomp项目;Include ;编译参数-fopenmp打开openmp,如果使用-lgomp则编译成单线程版本;条件编译 #ifdef _OPENMP声明并行区,由编译器和运行时库确定线程的创建、终止、调度和数量,并行区结束后线程挂起等待进入下一并行区;Intel编译器的OMP开关,关上时将编译成非并行代码,-Qo原创 2013-12-13 09:11:47 · 945 阅读 · 0 评论 -
OpenMP与C++:事半功倍地获得多线程的好处
来源:IIEEG01-28-2011 在并行计算领域有一个广为流传的笑话——并行计算是未来之事并且永远都是。这个小笑话几十年来一直都是对的。一种类似的观点在计算机架构社区中流传,处理器时钟速度的极限似乎近在眼前,但时钟速度却一直在加快。多核革命是并行社区的乐观和架构社区的悲观的冲突。 现在主流的CPU厂商开始从追求时钟频率转移到通过多核处理器来增加并行支持。原因很简单:把多个CPU原创 2013-12-13 09:17:18 · 1136 阅读 · 0 评论 -
Vs 2008 对 OpenMP 的 支持 以及 OpenMP的环境变量及库函数
Visual C++® 2008对OpenMP的支持 VC++2008根据项目属性配置的指示进行 /openmp编译器切换,当配置了OpenMP支持后,编译器会提供_OPENMP定义,可以使用#ifdef _OPENMP来决定程序使用或者不使用OpenMP。配置VC++2008项目,在project的property页面上的C/C++ -> Language 选项卡原创 2013-12-13 09:14:51 · 1705 阅读 · 0 评论 -
HOG 梯度直方图特征
有关行人的智能检测,近年来可谓是一个热门话题。日益流行的“智慧城市”的设想中,行人检测也可以应用在例如智能交通、安防等事业中。来自法国的研究人员Navneet Dalal等软件高手在2005年首次提出了HOG,即梯度直方图特征。并以线性SVM作为分类器训练大量样本。在他们大量的实验后证明,这样的研发成品可以很好得实现行人检测。 令人欣喜的是,强大的计算机视觉库OPENCV中现在已经有了HOG原创 2013-12-12 10:16:19 · 1664 阅读 · 0 评论 -
内存区划分、内存分配、常量存储区、堆、栈、自由存储区、全局区
一.在c中分为这几个存储区1.栈 - 由编译器自动分配释放2.堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收3.全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。- 程序结束释放4.另外还有一个专门放常量的地方。- 程序结束释放原创 2013-12-12 10:16:15 · 699 阅读 · 0 评论 -
大小端转换
BIG-ENDIAN(大字节序、高字节序)LITTLE-ENDIAN(小字节序、低字节序)主机字节序网络字节顺序JAVA字节序1.BIG-ENDIAN、LITTLE-ENDIAN跟多字节类型的数据有关的比如int,short,long型,而对单字节数据byte却没有影响。BIG-ENDIAN就是低位字节排放在内存的低端,高位字节排放在内存的高端。而LITTLE-ENDIAN原创 2013-12-12 09:56:07 · 2045 阅读 · 0 评论 -
在vs2008下操作excel和数据库
通过vs2008的添加类,选择MFC,选择从TypeLib中的MFC类,选择从文件,选择对应的类型库文件,导入Excel2003的类型库是excel.exe,然后选择需要的接口,然后完成。这样能生成很多的类文件的头文件,里面包含了实现代码。但是编译的时候还是会报错,应该注释掉各个类文件中的import语句改在stdafx.h中统一的定义// 导入ADO的类型库#im原创 2013-11-06 20:51:31 · 1031 阅读 · 0 评论 -
MFC vc++6 读写Excel
1.Ctrl+W 执行 ClassWizard2.Add Class.../From a type Library... 在 Office 目录中,找到你想使用的类型库。(excel.exe)根据需要添加,(可以全部)(2003)3.包含头文件#include "excel.h"4.详见msdn:Automating Microsoft Office 97 and Microsoft原创 2013-11-06 20:19:57 · 1174 阅读 · 0 评论 -
在 VS2008 下操作 Excel 的方法总结
这些天做个软件,需要读取 Excel 并导入到数据库中,所以研究了一下在 VC 下操作 Excel 的方法,这里做个总结,以作备忘。 一、最常用的 OLE 自动化方式这个方式应该说是功能最全的方式,可能也是应用的最多的方式。由于这种方式采用的是隐藏启动 Office Excel 的方式,所以几乎是全能,任何功能都可以完成。不过缺点也是比较明显的:1、采用 OLE 方原创 2013-11-06 20:52:08 · 901 阅读 · 0 评论