C++
rmaly
专治不服
展开
-
VC调试--一位老师的回帖
VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。(Linux或Unix下可以在用GDB调试时,看每句C对转载 2012-08-17 12:16:27 · 988 阅读 · 0 评论 -
非模态对话框DLL
最近在弄一个DLL,涉及到一个非模态对话框对话框的建立无区模态非模态,区别在于创建的方式。模态对话框是使用DoModal的方式创建,而非模态对话框的方式是:CDialog *pDlg = new CDialog(父窗口指针);pDlg->Create(ID, 父窗口指针);pDlg->ShowWindow(SW_SHOW);这样非模态对话框便显示出来了然后……关闭对话框原创 2014-03-18 15:17:56 · 2279 阅读 · 1 评论 -
MFC工具栏既显示图标又显示文字
默认情况下,MFC工具栏只是显示图标,要显示图标和文字(图标在左文字在右)在CreateEx时加入TBSTYLE_LIST,便可以显示了可以使用SetButtonText的方式给图标添加文字原创 2014-03-18 17:48:36 · 5779 阅读 · 3 评论 -
vector元素为自定义数据时如何进行排序
方法一:在结构体中重载运算符,调用STL的sort()函数#include "stdafx.h"#include #include #include using namespace std;class MYSTRUCT{public:int id;int nums;vector vec;MYSTRUCT(){id转载 2013-03-14 11:43:59 · 844 阅读 · 0 评论 -
网宿的一道考题
#include #include using namespace std;char *myinet_ntoa(uint32_t in) { static char b[18]; register char *p; p = (char *)∈ #define UC(b) (((int)b)&0xff) (void)原创 2012-09-15 20:33:21 · 1172 阅读 · 0 评论 -
内存拷贝
void* mymemorycpy(void *dest,const void *src,int len){ char *cdest = static_cast(dest); const char *csrc = static_cast(src); if(cdest > csrc && cdest { for(int i = len - 1;i >= 0;--i)原创 2012-09-09 19:44:32 · 597 阅读 · 0 评论 -
类成员函数的重载、覆盖和隐藏区别?
(1)相同的范围(在同一个类中);(2)函数名字相同;(3)参数不同;(4)virtual 关键字可有可无。b.覆盖是指派生类函数覆盖基类函数,特征是:(1)不同的范围(分别位于派生类与基类);(2)函数名字相同;(3)参数相同;(4)基类函数必须有virtual 关键字。 c.“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下:(1)如果派生类的函转载 2012-09-09 20:43:17 · 457 阅读 · 0 评论 -
c++的volatile用法
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:1) 并行设备的硬件寄存器(如:状态寄存器)2) 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)转载 2012-09-09 20:27:14 · 657 阅读 · 0 评论 -
static_cast、dynamic_cast reinterpret_cast和const_cast
关于强制类型转换的问题,很多书都讨论过,写的最详细的是C++ 之父的《C++ 的设计和演化》。最好的解决方法就是不要使用C风格的强制类型转换,而是使用标准C++的类型转换符:static_cast, dynamic_cast。标准C++中有四个类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast。下面对它们一一进行介绍。st转载 2012-08-19 13:36:31 · 430 阅读 · 0 评论 -
c++经典面试题
1、int a=5,则 ++(a++)的值是()A、5 B、 6 C、7 D、逻辑错误 a++返回的是一个临时变量,这里是右值,不能再前面++了2、下面的代码输出什么? [cpp] view plaincopyint main(void) { int a[5] = {1转载 2012-08-25 23:32:25 · 613 阅读 · 0 评论 -
浅谈c++容器
什么是容器首先,我们必须理解一下什么是容器,在C++ 中容器被定义为:在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器。很简单,容器就是保存其它对象的对象,当然这是一个朴素的理解,这种“对象”还包含了一系列处理“其它对象”的方法,因为这些方法在程序的设计上会经常被用到,所以容器也体现了一个好处,就是“容器类是一种对特定代码重用问题的良好的解决方案”。转载 2012-08-26 15:05:53 · 734 阅读 · 0 评论 -
vector::size_type与int的区别
int main(void){vector array;array.push_back( 1 );array.push_back( 2 );array.push_back( 3 );coutfor( vector::iterator m = array.begin();m != array.end();m++ ) // 反向遍历array数组{co原创 2012-08-26 12:58:57 · 2572 阅读 · 2 评论 -
这个程序有何不妥?
struct Test{Test(int) { }Test() { }void fun() { }};int main(void){Test a(1);a.fun();Test b();b.fun();return 0;}在编译的时候出错,说b并不是Test对象,原因就在于在b后面多了一个无谓的(),如果构造函数没参数的话,()是原创 2012-08-26 12:28:52 · 413 阅读 · 0 评论 -
c++运算符优先级表
http://www.cppreference.com/operator_precedence.html PrecedenceOperatorDescriptionExampleAssociativity1()[]->.::++--Grouping operatorArray accessMember acce转载 2012-09-01 18:44:53 · 481 阅读 · 0 评论 -
static作用
static有什么用?(1)局部静态变量在C/C++中, 局部变量按照存储形式可分为三种auto, static, register(谭浩强, 第174-175页)与auto类型(普通)局部变量相比, static局部变量有三点不同1. 存储空间分配不同auto类型分配在栈上, 属于动态存储类别, 占动态存储区空间, 函数调用结束后自动释放, 而static分配在静态存转载 2012-08-21 22:32:09 · 507 阅读 · 0 评论 -
C/C++内存对齐(转)
一、什么是字节对齐,为什么要对齐? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数转载 2012-08-20 10:59:36 · 667 阅读 · 0 评论 -
指针与引用的区别
指针与引用看上去完全不同(指针用操作符“*”和“->”,引用使用操作符“. ”),但是它们似乎有相同的功能。指针与引用都是让你间接引用其他对象。你如何决定在什么时候使用指针,在什么时候使用引用呢?首先,要认识到在任何情况下都不能使用指向空值的引用。一个引用必须总是指向某些对象。因此如果你使用一个变量并让它指向一个对象,但是该变量在某些时候也可能不指向任何对象,这时你应该把变量声明为指针,因转载 2012-08-20 11:26:19 · 444 阅读 · 0 评论 -
定义一个宏,不用if < >判断大小
方法一:#define max(a,b) ((a) + (b) + abs((a) - (b))) / 2if a > b则 (a+b+a-b)/2 = aif a 方法二:#define max(a,b) ((((a) - (b)) >> 31)?(b):(a))一个int的31位是符号位,右移31位,为0则为正则a大,否则b大方法三:#define ma原创 2012-08-18 13:21:44 · 1447 阅读 · 0 评论 -
解决CListCtrl闪烁问题
当列表频繁插入数据时,难免会发生闪烁现象,以下使用的重绘的方式解决闪烁,用到的是双缓冲。接管WM_ERASEBKGND消息,去掉默认的处理,改为不处理,即返回falseBOOL CListCtrlEx::OnEraseBkgnd(CDC* pDC){//响应WM_ERASEBKGND消息 return false; //屏蔽默认处理 //return CListCtrl::转载 2014-03-19 10:11:24 · 2012 阅读 · 1 评论