GetCurrentTime函数问题

ArdourCareful 2011-10-09 12:25:28
CTime t = CTime::GetCurrentTime();这个语句不是创建类CTime的对象t吗.为什么后面跟的不是构造函数而是CTimCTime::GetCurrentTime();呢???不懂求解.

还有类似的问题如:int nYear = COleDateTime::GetCurrentTime().GetYear();等号后面的语句,成员函数之间可以相与调用吗,我只知道该类的对象可以调用类中的成员函数,如:COleDateTime tt;tt.GetYear();

请大虾们解答.
...全文
316 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
sharptiger123 2011-10-10
  • 打赏
  • 举报
回复
得到计算机当前时间 年月日时分秒
呔妖怪来嘛 2011-10-10
  • 打赏
  • 举报
回复
可GetCurrentTime()返回值是Call this static member function to return the current date/time value 最近的日期或时间啊.这是MSDN中的原话.

——————
这句话能说明什么
Quab 2011-10-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ardourcareful 的回复:]

引用 2 楼 hedengxiang2011 的回复:
CTime t 构造一个对象t, CTime::GetCurrentTime();获取当前时间,并封装到一个CTime对象中,
可以把CTime t = CTime::GetCurrentTime();分解成:
CTime t;
t = CTime::GetCurrentTime();

这样就比较好理解了。。。

int ……
[/Quote]

这是个静态函数,静态函数和全局函数一样,调用时,这个函数内部会new一个Ctime对象,同时用当前的时间初始化这个对象,并把构造好的对象给t

msdn上这样描述的:说明这个对象是这个函数内部就创建好了的
Returns a CTime object that represents the current time.
ArdourCareful 2011-10-10
  • 打赏
  • 举报
回复
回3楼,您好!
针对你这句话:成员函数之间可以相与调用吗
不是成员函数之间可以相互调用,而是COleDateTime::GetCurrentTime()返回了一个临时COleDateTime对象,所以可以COleDateTime::GetCurrentTime().GetYear(); c++里面可以这么做



可GetCurrentTime()返回值是Call this static member function to return the current date/time value 最近的日期或时间啊.这是MSDN中的原话.
ArdourCareful 2011-10-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 hedengxiang2011 的回复:]
CTime t 构造一个对象t, CTime::GetCurrentTime();获取当前时间,并封装到一个CTime对象中,
可以把CTime t = CTime::GetCurrentTime();分解成:
CTime t;
t = CTime::GetCurrentTime();

这样就比较好理解了。。。

int nYear = COleDateTime::GetCurre……
[/Quote]
您的意思是:COleDateTime::GetCurrentTime();就是个类对象,从哪知道它以封装成一个对象呢?
hedengxiang 2011-10-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ardourcareful 的回复:]
引用 2 楼 hedengxiang2011 的回复:
CTime t 构造一个对象t, CTime::GetCurrentTime();获取当前时间,并封装到一个CTime对象中,
可以把CTime t = CTime::GetCurrentTime();分解成:
CTime t;
t = CTime::GetCurrentTime();

这样就比较好理解了。。。

int n……
[/Quote]


不是说COleDateTime::GetCurrentTime();是一个类对象,而是这个函数返回值是一个类对象……
hsphsphsp 2011-10-10
  • 打赏
  • 举报
回复
理解静态函数就可以了。
呔妖怪来嘛 2011-10-09
  • 打赏
  • 举报
回复
CTime::GetCurrentTime
static CTime PASCAL GetCurrentTime( );

COleDateTime::GetCurrentTime
static COleDateTime PASCAL GetCurrentTime( );
都是静态的

gameslq 2011-10-09
  • 打赏
  • 举报
回复
>>为什么后面跟的不是构造函数而是CTimCTime::GetCurrentTime();
看看CTimCTime类关于成员函数GetCurrentTime的定义:

static CTime PASCAL GetCurrentTime();

是静态成员函数,类不实例化就可以调用该函数,假设你要用构造函数来获取当前时间,比这麻烦多了
>>成员函数之间可以相与调用吗
不是成员函数之间可以相互调用,而是COleDateTime::GetCurrentTime()返回了一个临时COleDateTime对象,所以可以COleDateTime::GetCurrentTime().GetYear(); c++里面可以这么做
hedengxiang 2011-10-09
  • 打赏
  • 举报
回复
CTime t 构造一个对象t, CTime::GetCurrentTime();获取当前时间,并封装到一个CTime对象中,
可以把CTime t = CTime::GetCurrentTime();分解成:
CTime t;
t = CTime::GetCurrentTime();

这样就比较好理解了。。。

int nYear = COleDateTime::GetCurrentTime().GetYear();
同样的,这条语句可以分解成:
COleDateTime tt;
tt = COleDateTime::GetCurrentTime();
int nYear = tt.GetYear();


自己去理解一下静态方法(函数)的作用,以及调用方式……
VC++常用函数一应俱全 内容举例: 在状态栏中添加时间 1)在String Table中添加New String,在此定义为ID_INDICATOR_CLOCK, 将其Caption设为00:00:00(由于状态栏根据Caption确定时间窗格的缺 省宽度,使用此值将为时间的显示预留空间)。注 2)在MainFrm.cpp中indicators声明处添加ID_INDICATOR_CLOCK,代 码如下:   这一步中ID_INDICATOR_CLOCK的插入位置将影响时间窗格在状态栏中 的显示位置。   3)安装定时器:在MainFrm.cpp中OnCreate函数处添加代码如下:   int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)   { ……   SetTimer(1,1000,NULL);//安装定时器,并将其时间间隔设为1000毫秒   return 0;   }   4)编写时间处理函数:利用ClassWizard为CMainFrame类加入WM_TIMER 的消息处理函数OnTimer,并添加代码如下:   void CMainFrame::OnTimer(UINT nIDEvent)   {// TODO: Add your message handler code here and/or call default   CTime time;   time=CTime::GetCurrentTime();//得到当前时间   CString s=time.Format(″%H:%M:%S″);//转换时间格式,这里格式一定要大写   m_wndStatusBar.SetPaneText(m_wndStatusBar.CommandToIn-   dex(ID_INDICATOR_CLOCK),s); //显示时钟   CFrameWnd::OnTimer(nIDEvent);}   5)销毁定时器:利用ClassWizard为CMainFrame类加入WM_CLOSE的消息处理   函数OnClose,并添加代码如下:   void CMainFrame::OnClose()   {// TODO: Add your message handler code here and/or call default   KillTimer(1);//销毁定时器
用于完成指定目录变化监控 /*----------------------线程函数------------------------------------*/ DWORD WINAPI CDDlg::ThreadProc( LPVOID lParam ) //线程函数 { CDDlg* obj = (CDDlg*)lParam; //参数转化 obj->hDir = CreateFile( //打开目录,得到目录的句柄 obj->m_strWatchedDir, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL ); if(obj->hDir ==INVALID_HANDLE_VALUE ) return false; char buf[(sizeof(FILE_NOTIFY_INFORMATION)+MAX_PATH)*2]; FILE_NOTIFY_INFORMATION* pNotify=(FILE_NOTIFY_INFORMATION*)buf; DWORD dwBytesReturned; while(true) { if( ::ReadDirectoryChangesW( obj->hDir, pNotify, sizeof(buf), true, FILE_NOTIFY_CHANGE_FILE_NAME| FILE_NOTIFY_CHANGE_DIR_NAME| FILE_NOTIFY_CHANGE_ATTRIBUTES| FILE_NOTIFY_CHANGE_SIZE| FILE_NOTIFY_CHANGE_LAST_WRITE| FILE_NOTIFY_CHANGE_LAST_ACCESS| FILE_NOTIFY_CHANGE_CREATION| FILE_NOTIFY_CHANGE_SECURITY, &dwBytesReturned, NULL, NULL ) ) { char tmp[MAX_PATH], str1[MAX_PATH], str2[MAX_PATH]; memset( tmp, 0, sizeof(tmp) ); //ZeroMemory() WideCharToMultiByte( CP_ACP,0,pNotify->FileName,pNotify->FileNameLength/2,tmp,99,NULL,NULL ); strcpy( str1, tmp ); if(pNotify->NextEntryOffset !=0 ) { PFILE_NOTIFY_INFORMATION p = (PFILE_NOTIFY_INFORMATION)((char*)pNotify+pNotify->NextEntryOffset); memset( tmp, 0, sizeof(tmp) ); WideCharToMultiByte( CP_ACP,0,p->FileName,p->FileNameLength/2,tmp,99,NULL,NULL ); strcpy( str2, tmp ); } switch(pNotify->Action) { case FILE_ACTION_ADDED: if(obj->m_bAddNew0) { CTime tt=CTime::GetCurrentTime(); CString strTT; strTT.Format("%d:%d:%d",tt.GetHour(),tt.GetMinute(),tt.GetSecond()); obj->m_list.InsertItem(0,obj->m_szi); obj->m_list.SetItemText(0,2,"添加了新文件"); obj->m_list.SetItemText(0,3,str1); obj->m_list.SetItemText(0,1,strTT); // PlaySound(MAKEINTRESOURCE(IDR_WAVE1),AfxGetResourceHandle(),SND_RESOURCE|SND_PURGE|SND_NODEFAULT); } break; case FILE_ACTION_REMOVED: if(obj->m_bDel0) { CTime tt=CTime::GetCurrentTime(); CString strTT; strTT.Format("%d:%d:%d",tt.GetHour(),tt.GetMinute(),tt.GetSecond()); obj->m_list.InsertItem(0,obj->m_szi); obj->m_list.SetItemText(0,2,"删除了文件"); obj->m_list.SetItemText(0,3,str1); obj->m_list.SetItemText(0,1,strTT); // PlaySound(MAKEINTRESOURCE(IDR_WAVE1),AfxGetResourceHandle(),SND_RESOURCE|SND_PURGE|SND_NODEFAULT); } break; case FILE_ACTION_RENAMED_NEW_NAME: if(obj->m_bRename0) { CTime tt=CTime::GetCurrentTime(); CString strTT; strTT.Format("%d:%d:%d",tt.GetHour(),tt.GetMinute(),tt.GetSecond()); obj->m_list.InsertItem(0,obj->m_szi); obj->m_list.SetItemText(0,2,"重命名了文件"); strcat(str1,"->"); obj->m_list.SetItemText(0,3,strcat(str1,str2)); obj->m_list.SetItemText(0,1,strTT); // PlaySound(MAKEINTRESOURCE(IDR_WAVE1),AfxGetResourceHandle(),SND_RESOURCE|SND_PURGE|SND_NODEFAULT); } break; case FILE_ACTION_RENAMED_OLD_NAME: if(obj->m_bRename0) { CTime tt=CTime::GetCurrentTime(); CString strTT; strTT.Format("%d:%d:%d",tt.GetHour(),tt.GetMinute(),tt.GetSecond()); obj->m_list.InsertItem(0,obj->m_szi); obj->m_list.SetItemText(0,2,"重命名了文件"); strcat(str1," 改名为 "); obj->m_list.SetItemText(0,3,strcat(str1,str2)); obj->m_list.SetItemText(0,1,strTT); // PlaySound(MAKEINTRESOURCE(IDR_WAVE1),AfxGetResourceHandle(),SND_RESOURCE|SND_PURGE|SND_NODEFAULT); } break; case FILE_ACTION_MODIFIED: if(obj->m_bModify0) { CTime tt=CTime::GetCurrentTime(); CString strTT; strTT.Format("%d:%d:%d",tt.GetHour(),tt.GetMinute(),tt.GetSecond()); obj->m_list.InsertItem(0,obj->m_szi); obj->m_list.SetItemText(0,2,"修改了文件"); obj->m_list.SetItemText(0,3,str1); obj->m_list.SetItemText(0,1,strTT); // PlaySound(MAKEINTRESOURCE(IDR_WAVE1),AfxGetResourceHandle(),SND_RESOURCE|SND_PURGE|SND_NODEFAULT); } break; default: if(obj->m_bOther0) { CTime tt=CTime::GetCurrentTime(); CString strTT; strTT.Format("%d:%d:%d",tt.GetHour(),tt.GetMinute(),tt.GetSecond()); obj->m_list.InsertItem(0,obj->m_szi); obj->m_list.SetItemText(0,2,"未知变化"); obj->m_list.SetItemText(0,3,""); obj->m_list.SetItemText(0,1,strTT); // PlaySound(MAKEINTRESOURCE(IDR_WAVE1),AfxGetResourceHandle(),SND_RESOURCE|SND_PURGE|SND_NODEFAULT); } break; } obj->m_i++; itoa(obj->m_i,obj->m_szi,10); //AfxBeginThread(SoundThread,0); } else break; } return 0; }

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧