
C/C++
文章平均质量分 65
Balancer
与其临渊羡鱼,不如退而结网。
展开
-
基类的构造函数带参数,如何定义其派生类
如果一个基类的构造函数带有参数,那么如何编写该基类的派生类呢?#include#includeusing namespace std;class Person{public: Person(int nAge) { m_nAge = nAge; }protected: int m_nAge;};class Men: publi原创 2013-03-22 22:13:05 · 1934 阅读 · 0 评论 -
C++虚继承:virtual public CParent的含义及作用
Question:父类:class CParent{....};继承类的声明比较特别:class CChild : virtual public CParent{....}请问,这个"virtual"是什么作用及含义?---------------------------------------------------------------转载 2013-04-22 08:53:22 · 823 阅读 · 0 评论 -
未处理的异常:0xC0000005: 读取位置 0xfeeefeee 时访问冲突
报错内容:COMMConsoleServer.exe 中的 0x1004a498 (COMMUtil.dll) 处未处理的异常: 0xC0000005: 读取位置 0xfeeefeee 时发生访问冲突错误分析:该错误一般是由于访问不该访问的内存导致的。在堆内存空间的释放过程中,函数HeapFree会用0xfeeefeee去对内存做标记,表示该内存是空闲的,也就是说转载 2013-04-27 10:22:11 · 6927 阅读 · 0 评论 -
关于VC中的0x????处未处理的异常:0xC0000005
转载于:http://hi.baidu.com/andywangcn/item/4b5a31594a06f1c8d2e10cc2使用VC编码的时候经常会出现“Test.exe 中的 0x00414030 处未处理的异常: 0xC0000005: 写入位置 0xfeeefeee 时发生访问冲突 。”出现0xC0000005的原因一般都是没有分配内存 或者 内存无效 所致,转载 2013-04-27 10:19:33 · 4283 阅读 · 0 评论 -
继承对象的构造和析构浅析
C++中的虚函数的内部实现机制到底是怎样的呢? 鉴于涉及到的内容有点多,我将分三篇文章来介绍。 第一篇:对象内存模型浅析,这里我将对对象的内存模型进行简单的实验和总结。 第二篇:继承对象的构造和析构浅析,这里我将对存在继承关系的对象的构造和析构进行简单的实验和总结。 第三篇:虚函数的内部机制浅析,这里我将对虚函数内部的实现机制进行实验总结。 我原创 2013-03-22 22:24:47 · 895 阅读 · 0 评论 -
如果函数的传入参数和返回值是对象
如果函数的传入参数和返回值是对象,那么这个过程中会发生哪些我们未曾注意过的细节呢?我在VS2008下做了如下实验,并做出了简单的分析,有不足或者不准确的地方,欢迎大家拍砖,我会及时修正相关内容。一、函数的传入参数是对象。#include #include using namespace std;class Person{public: Person(in原创 2013-03-22 22:16:33 · 1405 阅读 · 0 评论 -
关于基类的this和派生类的this
如果我们定义一个派生类的对象,那么基类的this和派生类的this是不是都指向这个派生类对象呢?为回答这个问题,我编写了如下代码:#include tchar.h>#include iostream>using namespace std;class Person{public: void PersonPri原创 2013-03-22 22:09:43 · 1361 阅读 · 0 评论 -
对象内存模型浅析
C++中的虚函数的内部实现机制到底是怎样的呢? 鉴于涉及到的内容有点多,我将分三篇文章来介绍。 第一篇:对象内存模型浅析,这里我将对对象的内存模型进行简单的实验和总结。 第二篇:继承对象的构造和析构浅析,这里我将对存在继承关系的对象的构造和析构进行简单的实验和总结。 第三篇:虚函数的内部机制浅析,这里我将对虚函数内部的实现机制进行实验总结原创 2013-03-22 22:20:49 · 962 阅读 · 0 评论 -
c++虚函数表详解(四)
当基类和派生类中分别存在不重名的虚函数的时候,派生类对象的虚函数表中的虚函数地址是如何排列的?#include #include using namespace std;class Human{public: virtual void HumanPrint() { cout << _T("Human::Print") << endl; }};class Man: p原创 2011-11-01 22:14:48 · 651 阅读 · 0 评论 -
c++虚函数表详解(三)
基类和派生类共用一个虚函数表吗?#include #include using namespace std;class Human{public: virtual void Print() { cout << _T("Human::Print") << endl; }};class Man: public Human{public: virtual void原创 2011-11-01 21:44:31 · 887 阅读 · 0 评论 -
c++虚函数表详解(二)
#include #include using namespace std;class Human{public: virtual void Print() { cout << _T("Human::Print") << endl; } virtual void Walk() { cout << _T("Human::Walk") << endl; }};原创 2011-10-30 20:24:39 · 653 阅读 · 0 评论 -
c++虚函数表详解(一)
问题1: 一个类对应一个虚函数表还是一个对象对应一个虚函数表?#include #include using namespace std;class Human{public: virtual void Print() { cout << _T("Human::Print") << endl; }};int _tmain(int argc, TCHAR argv[]原创 2011-10-30 20:02:36 · 895 阅读 · 0 评论 -
详解C++代码反汇编后的堆栈寄存器EBP和ESP
转载于:http://www.cnblogs.com/pugang/archive/2012/05/25/2518499.html最近在分析一个进程崩溃的严重问题,其中有些过程分析需要对ebp, esp有清晰的理解,对于ebp和esp相信大家都很熟悉了,但是为了使本文自成体系,我还是解释一下。ebp--栈底指针esp--栈顶指针 如图所示,简化后的代码调用过程如下:转载 2013-05-02 09:16:16 · 825 阅读 · 0 评论 -
逆向反汇编代码推算C++的局部变量
逆向反汇编代码推算C++的局部变量上文说明了C++反汇编后的EBP,ESP寄存器都是做什么用的,相信大家已经有所了解,如果有没看过的请参考下文:http://www.cnblogs.com/pugang/archive/2012/05/25/2518499.html本文不会对其再做过多的讲解,如果还有问题,欢迎大家留言讨论。首先明确本文要解决的问题:在没有源代码的情况下如何看明转载 2013-05-02 09:18:27 · 815 阅读 · 0 评论 -
我所理解的设计模式(C++实现)——观察者模式(Observer Pattern) (转)
目录(?)[-]概述类图与实例适用性优缺点概述: 最近中国股市起起伏伏,当然了起伏就用商机,小明发现商机后果断想入市,买入了中国证券,他想在电脑客户端上,网页上,手机上,iPad上都可以查看到该证券的实时行情,这种情况下我们应该怎么设计我们的软件呢?我们可以这样:小明的所有客户端上都订阅中国证券这个股票,只要股票一有变化,所有的客户端都会被通知到并且被转载 2013-08-06 09:15:27 · 683 阅读 · 0 评论 -
智能指针
内存泄露一直是C++程序员头疼的问题。下面就简单理解下C++智能指针。 智能指针 是存储指向动态分配对象指针的类。 目的是能够自动正确的销毁内存,防止内存泄露。通用的实现技术是使用引用计数(reference count),将一个计数器与类指向的对象相关联。引用计数跟踪该类有多少个对象共享同一指针创建一个类的对象时, 初始化指针并且将引用计数置为1;转载 2013-08-06 08:45:00 · 753 阅读 · 0 评论 -
VC调试方法大全
一、调试基础调试快捷键F5: 开始调试Shift+F5: 停止调试F10: 调试到下一句,这里是单步跟踪 F11: 调试到下一句,跟进函数内部Shift+F11: 从当前函数中跳出Ctrl+F10: 调试到光标所在位置F9: 设置(取消)断点Alt+F9: 高级断点设置跟踪调试1、转载 2013-06-20 14:15:33 · 660 阅读 · 0 评论 -
GFlags 检查内存越界、野指针等作用的工具使用
转载于:http://blog.youkuaiyun.com/zhufangyou/article/details/6563878 打开检查功能: gflags /p /enable **.exe /full 关闭检查功能: gflags /p /disable **.exe 列出当前启动了页堆的进程列表 :gflags /p 1. 案例调试运行,程序退出时崩溃在转载 2013-05-10 11:00:00 · 1402 阅读 · 0 评论 -
WinDbg配置和使用基础
WinDbg是微软发布的一款相当优秀的源码级(source-level)调试工具,可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件。1. WinDbg介绍: Debugging Tools and Symbols: Getting Startedhttp://www.microsoft.com/whdc/devtools/debugging/debugstart转载 2013-05-10 11:02:40 · 575 阅读 · 0 评论 -
__cdecl
__cdecl 是C Declaration的缩写(declaration,声明),表示C语言默认的函数调用方法:所有参数从右到左依次入栈,这些参数由调用者清除,称为手动清栈。被调用函数不会要求调用者传递多少参数,调用者传递过多或者过少的参数,甚至完全不同的参数都不会产生编译阶段的错误。转载 2013-05-09 23:12:16 · 543 阅读 · 0 评论 -
插入排序
// 函数功能:插入排序// 函数名称:InsertSort// 传入参数:ary -- 待排序的数组,length -- 数组的长度// 日期:2013-05-09void InsertSort(int ary[], int length){ for (int i = 1; i < length; i++) { int nKey = ary[i]; int j = i -原创 2013-05-09 23:27:28 · 623 阅读 · 0 评论 -
VS2010 C++创建、调用DLL图解
一、创建DLL 1、新建项目: Visual C++ -> Win32项目,名称:CnBlogsDLL点击完成,进入下一步。注意不要点完了按钮,点击下一步。选中DLL单选框,然后点击完成。这样DLL项目的创建工作就基本结束了。 2、新建头文件:CommStruts.h#pragma once//转载 2013-05-08 14:10:04 · 904 阅读 · 0 评论 -
Memory(-Leak) and Exception Trace (CRT and COM Leaks)
http://www.codeproject.com/Articles/3134/Memory-Leak-and-Exception-Trace-CRT-and-COM-Leakshttp://www.codeproject.com/Articles/11132/Walking-the-callstackhttp://stackwalker.codeplex.com/[^]http:/转载 2013-05-02 13:59:06 · 1022 阅读 · 0 评论 -
野指针的产生以及应对办法
http://www.cnblogs.com/egmkang/archive/2011/09/26/2189548.htmlhttp://blog.youkuaiyun.com/strategycn/article/details/7865525转载 2013-05-02 11:19:11 · 694 阅读 · 0 评论 -
Umdhtools.exe: 如何使用 umdh.exe 来查找内存泄漏
注意:这篇文章是由无人工介入的自动的机器翻译系统翻译完成。这些文章是微软为不懂英语的用户提供的, 以使他们能够理解这些文章的内容。微软不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的使用所引起的任何直接的, 或间接的可能的问题负责。文章编号:268343最后修改:2006年5月30日修订:7.1转载 2013-05-02 11:45:23 · 1173 阅读 · 0 评论 -
自己编写一个简单的ActiveX控件——详尽教程
最近开始学ActiveX控件编程,上手不太容易,上网想找相关教程也没合适的,最后还是在师哥的指导下完成了第一个简单控件的开发,现在把开发过程贴出来与大家分享一下~(环境说明——平台:vs2005;语言:VC++;基于对话框) ①新建工程:首先以管理员身份运行vs2005,文件->新建->项目,选择Visual C++下MFC,模板选MFC ActiveX控件,自定义工程名(我的为M转载 2013-04-17 09:01:06 · 2896 阅读 · 0 评论 -
演练:创建和使用静态库 (C++)
我们将创建的下一个库类型是静态库 (LIB)。 使用静态库是重用代码的一种绝佳方式。 您不必在自己创建的每个程序中重新实现同一例程,而只需对这些例程编写一次,然后从需要该功能的应用程序引用它们即可。本演练演示如何完成以下任务:创建静态库项目。向静态库添加类。创建引用静态库的控制台应用程序。在应用程序中使用静态库的功能。运行该应用程序。系统必备转载 2013-04-15 17:25:12 · 643 阅读 · 0 评论 -
在共享DLL中使用MFC 和在静态库中使用MFC的区别
使用VS2008,在项目属性中有一项MFC的使用,有三种设置: 1.使用标准Windows库 2.在共享DLL中使用MFC 3.在静态库中使用MFC 第一种顾名思义。 第二种指的是打包时一些MFC的DLL的内容没有被包含在EXE文件中,所以EXE文件较小,但是运行时要求系统中要有相关的DLL文件。转载 2013-04-15 17:20:12 · 880 阅读 · 0 评论 -
rand和srand函数用法详解。
转载于 http://blog.sina.com.cn/s/blog_5fbb0943010106r9.html标准库 (被包含于 中)提供两个帮助生成伪随机数的函数: 函数一:int rand(void); 从srand (seed)中指定的seed开始,返回一个[seed, RAND_MAX(0x7fff))间的随机整数。 函数二:void转载 2013-02-03 22:49:03 · 582 阅读 · 0 评论 -
#undef的用法
在Visual Studio2008中编写如下代码:#include using namespace std;int main(){#define MODI 10 cout << MODI << endl;#undef MODI cout << MODI + 1 << endl; return 0;}编译器会对 cout << MODI + 1 <<原创 2013-02-01 13:45:37 · 6822 阅读 · 0 评论 -
#line的用法
在Visual Studio 2008下编写如下代码:#include using namespace std;int main(){#line 100 cout << "__LINE__" << __LINE__ << endl; return 0;}运行结果为:总结:#line 100的作用是把下一行的行号变为100。原创 2013-02-01 14:06:10 · 1168 阅读 · 0 评论 -
对象的隐式转换。
编写如下代码:#include using namespace std;class Human{public: Human(int nAge) { m_nAge = nAge; m_nHeight = 183; cout << "构造函数被执行" << endl; } Human(Human& man) { m_nAge = man.m_nAge;原创 2013-01-29 14:34:58 · 632 阅读 · 0 评论 -
整型 乘以 浮点型
一个整型乘以一个浮点型,其结果是?在VS2008上编写如下代码:#include using namespace std;int main(){ int nTest = 11; double dTest = 0.3; cout << dTest * nTest<< endl; return 0;}其运行结果如下图所示:一个整型加上或减去或除以原创 2013-01-29 14:19:01 · 16952 阅读 · 0 评论 -
c++虚函数表详解(八)
多重继承的派生类中也有虚函数,那么虚函数表是什么样子的呢?#include #include using namespace std;class Father{public: virtual void walk() { cout << _T("Father::walk") << endl; }};class Mother{public: virtual voi原创 2011-11-06 10:11:36 · 950 阅读 · 1 评论 -
c++虚函数表详解(九)
多重继承的派生类中存在和基类同名的虚函数的话,派生类的虚函数表是啥样的呢?#include #include using namespace std;class Father{public: virtual void walk() { cout << _T("Father::walk") << endl; } virtual void speak() { cou原创 2011-11-06 12:30:47 · 692 阅读 · 0 评论 -
c++虚函数表详解(六)
如果基类中有虚函数,派生类有和基类同名的虚函数,也有不同名的虚函数,那么派生类的虚函数表的内容是按照什么规则存储的呢?#include #include using namespace std;class Human{public: virtual void walk() { cout << _T("Human::walk") << endl; } virtual v原创 2011-11-06 00:21:21 · 629 阅读 · 0 评论 -
c++虚函数表详解(七)
多重继承的派生类的虚函数表是什么样的?#include #include using namespace std;class Father{public: virtual void walk() { cout << _T("Father::walk") << endl; }};class Mother{public: virtual void speak()原创 2011-11-06 09:55:39 · 650 阅读 · 0 评论 -
c++虚函数表详解(五)
基类和派生类的虚函数同名时,派生类对象的虚函数表如何工作?#include #include using namespace std;class Human{public: virtual void Print() { cout << _T("Human::Print") << endl; }};class Man: public Human{public:原创 2011-11-01 22:26:49 · 674 阅读 · 0 评论 -
gcc编译C++程序
单个源文件生成可执行程序下面是一个保存在文件 helloworld.cpp 中一个简单的 C++ 程序的代码: /* helloworld.cpp */#include int main(int argc,char *argv[]){ std::cout return(0);}程序使用定义在头文件 iostream 中的 cout,向标准输出写入一转载 2013-03-31 19:33:04 · 530 阅读 · 0 评论 -
标准预定义宏
一、标准预定义宏 The standard predefined macros are specified by the relevant language standards, so they are available with all compilers that implement those standards. Older compilers may not provide all转载 2013-03-19 14:14:31 · 911 阅读 · 0 评论