随笔分类 -  C/C++

摘要:解释某个函数,我通常的讲解不会先去长篇大论去空谈,先整个例子来看看!!走起....#include <iostream>#include <string>using namespace std;class A{public: A(const char*s) { cout<<s<<endl; }};class B:virtual public A{public: B(const char*s1,const char*s2):A(s1) { cout <<s2<<endl; }};class C:virtual public 阅读全文
posted @ 2013-04-25 16:40 记忆斑驳的时光 阅读(12433) 评论(0) 推荐(2)
摘要:拷贝构造函数是c++最为基础的概念之一,大家自认为对拷贝构造函数了解么?那么请先回答三个问题,就知道了!1、以下函数哪个是 拷贝构造函数,为什么?1 X::X(const X&);2 X::X(X);3 X::X(X &,int a=1);4 X::X(X &,int a=1,b=2);2、一个类中可以存在多余一个的拷贝构造函数吗??3、写出一下程序段的输出结果,并说明为什么?如果说你都回答对了,那就赶快离开这里吧!!这里不是你的栖息之地!答案:1、对于一个类X,如果一个构造函数的第一个参数是下列之一:a)X&b)const X&c)volatile X 阅读全文
posted @ 2013-04-24 21:15 记忆斑驳的时光 阅读(538) 评论(0) 推荐(0)
摘要:构造函数的执行次序如下:1、调用基类构造函数,调用顺序按照他们的继承时声明的顺序。2、调用内嵌成员对象的构造函数,调用顺序按照他们在类中声明的顺序3、派生类的构造函数体中的内容析构函数的调用顺序相反先看一个拷贝构造函数的调用,Point拷贝构造函数调用了几次???Line拷贝构造函数又调用了几次???#include #include using namespace std;class Point{public: Point(int xx=0,int yy=0) { X = xx; Y = yy; coutusing namespace std;... 阅读全文
posted @ 2013-04-24 20:36 记忆斑驳的时光 阅读(1435) 评论(0) 推荐(1)
摘要:ID--HANDLE--HWND三者之间的互相转换id->句柄 hWnd = ::GetDlgItem(hParentWnd,id);id->指针 CWnd::GetDlgItem();句柄->idid = GetWindowLong(hWnd,GWL_ID);句柄->指针 CWnd *pWnd=CWnd::FromHandle(hWnd);指针->ID id = GetWindowLong(pWnd->GetSafeHwnd,GWL_ID); GetDlgCtrlID();指针->句柄 hWnd=cWnd.GetSafeHandle() or myw 阅读全文
posted @ 2013-02-11 11:03 记忆斑驳的时光 阅读(496) 评论(0) 推荐(1)
摘要:在编写MFC的程序的时候,经常 用到CString这种类型的变量,CString和string以及char*之间的转换也是经常用到的,在这里总结一下他们之间的转换常用的方法。string 转 CString CString.format("%s", string.c_str()); char 转 CString CString.format("%s", char*); char* 转 string string s(char *); string 转 char * char *p = string.c_str(); CString 转 string st 阅读全文
posted @ 2013-02-03 17:53 记忆斑驳的时光 阅读(610) 评论(0) 推荐(0)
摘要:1.调用SHELL HINSTANCE ShellExecute( HWND hwnd, LPCTSTR lpOperation, LPCTSTR lpFile, LPCTSTR lpParameters, LPCTSTR lpDirectory, INT nShowCmd ); 2.创建一个新的进程。BOOL CreateProcess( LPCTSTR lpApplicationName, LPTSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpTh... 阅读全文
posted @ 2013-01-29 19:40 记忆斑驳的时光 阅读(2343) 评论(0) 推荐(0)
摘要:操作系统的实验要用到管道.管道(Pipe)实际是用于进程间通信的一段共享内存,创建管道的进程称为管道服务器,连接到一个管道的进程为管道客户机。一个进程在向管道写入数据后,另一进程就可以从管道的另一端将其读取出来。匿名管道(Anonymous Pipes)是在父进程和子进程间单向传输数据的一种未命名的管道,只能在本地计算机中使用,而不可用于网络间的通信。 匿名管道实施细则 匿名管道由CreatePipe()函数创建,该函数在创建匿名管道的同时返回两个句柄:管道读句柄和管道写句柄。CreatePipe()的函数原型为: BOOL CreatePipe(PHANDLE hReadPipe,... 阅读全文
posted @ 2013-01-29 19:39 记忆斑驳的时光 阅读(1305) 评论(0) 推荐(1)
摘要:对话框头文件XXXDlg.h:1.添加成员变量NOTIFYICONDATA m_nid;2.添加tray消息响应函数的声明afx_msg LRESULT OnTrayNotify(WPARAM wParam, LPARAM lParam);对话框实现文件XXXDlg.cpp:1.定义tray消息 #define UM_TRAYNOTIFY WM_USER + 112.CXXXDlg的构造函数添加memset(&m_nid, 0, sizeof(m_nid)); // Initialize NOTIFYICONDATA struct m_nid.cbSize = sizeof(m_nid 阅读全文
posted @ 2013-01-25 18:04 记忆斑驳的时光 阅读(2350) 评论(1) 推荐(0)
摘要:析构函数(destructor)也是一个特殊的成员函数,它的作用与构造函数相反,它的名字是类名的前面加一个“~”符号。在C++中“~”是位取反运算符,从这点也可以想到:析构函数是与构造函数作用相反的函数。当对象的生命期结束时,会自动执行析构函数。具体地说如果出现以下几种情况,程序就会执行析构函数:①如果在一个函数中定义了一个对象(它是自动局部对象),当这个函数被调用结束时,对象应该释放,在对象释放前自动执行析构函数。②static局部对象在函数调用结束时对象并不释放,因此也不调用析构函数,只在main函数结束或调用exit函数结束程序时,才调用static局部对象的析构函数。#include 阅读全文
posted @ 2013-01-23 17:50 记忆斑驳的时光 阅读(1999) 评论(0) 推荐(0)
摘要:在C++中的一种函数申明被称之为:纯虚函数(pure virtual function).它的申明格式如下:class CShape{public: virtual void Show()=0;};类的一个成员定位虚函数的实际意义在于让C++知道该函数并无意义,它的作用只是为了让派生类进行函数重载保留位置。注意红色部分,在普通的虚函数后面加上"=0"这样就声明了一个pure virtual function.废话不说先看例子: 1 #include <iostream> 2 #include <cstdlib> 3 #include <cstd 阅读全文
posted @ 2013-01-23 12:10 记忆斑驳的时光 阅读(4915) 评论(3) 推荐(2)
摘要:我们都知道MFC是C++类库,本文详细介绍C++的这个类库,适合初学者阅读,希望对你有帮助,一起来看。MFC (Microsoft Foundation Class Library)中的各种类结合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立Windows下的应用程序,这是一种相对SDK来说更为简单的方法。因为总体上,MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓。Microsoft Visual C++提供了相应的工具来完成这个工作:AppWizard可以用来生成初步的框架文件(代码和资 阅读全文
posted @ 2013-01-22 09:35 记忆斑驳的时光 阅读(1119) 评论(0) 推荐(1)
摘要:〈一〉开门见山我们先通过两个例子对比了解一下reinterpret_cast(32位操作系统为例)1〉#include <iostream>using namespace std;int main(){ int myArray[5]={0,1,2,3,4}; char myChar[5]={'H','a','o','Y','u'}; int *aPoint = myArray; char *bPoint = myChar; for(int i=0;i<5;i++) { cout<<*( 阅读全文
posted @ 2013-01-20 20:31 记忆斑驳的时光 阅读(2489) 评论(2) 推荐(2)
摘要:相同点:都是地址的概念: 指针指向一块内存,它的内容是所指内存的地址; 引用是某块内存的别名。不同点:指针是一个实体,而引用仅仅是个别名; int a=3; int &ra = a; (1)&在此不是求地址运算,而是起标识作用 (2)类型标识符是指目标变量的类型 (3)声明引用时,必须同时对其进行初始化 (4)引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,且不能再把该引用名作为其他变量名的别名(int b;int &ra=b 是不可以的) (5)声明一个引用,不是新定义一个变量,它只表示该引用名是目标变量名的一个别名,它本身... 阅读全文
posted @ 2013-01-20 12:00 记忆斑驳的时光 阅读(1518) 评论(0) 推荐(0)