锘??xml version="1.0" encoding="utf-8" standalone="yes"?> @w.cn閭娉ㄥ唽鍦板潃錛?br />
https://domains.live.com/members/signup.aspx?domain=w.cn @9.cn閭娉ㄥ唽鍦板潃錛?br />
https://domains.live.com/members/signup.aspx?domain=9.cn
]]>
]]>
]]>
]]>
]]>
涓 鏈嶅姟绔?br />浣跨敤QTcpServer綾?br />QTcpServer *tcpServer = new QTcpServer(this);
寮鍚洃鍚?br />tcpServer->listen(QHostAddress::LocalHost, port); //port涓虹鍙e彿
濡傛灉鐩戝惉澶辮觸, 璇鋒煡鐪媡cpServer->errorString();
鍙互榪炴帴tcpServer瀵硅薄鐨刵ewConnection淇″彿, 榪欐牱涓鏈夊鎴風榪炴帴涓婃潵, 灝卞彲浠ヨ皟鐢ㄦ垜浠殑榪炴帴妲借繘琛屽鐞?br />connect(tcpServer, SIGNAL(newConnection), this, SLOT(slotNewClientConnect()));
褰撴柇寮鐩戝惉鏃? 鍙互鍏堝垽鏂崟鍓嶆槸鍚﹀湪鐩戝惉
tcpServer->isListening(), 鑻ユ灉鏄? 鍒欒皟鐢╰cpServer->close();鍏抽棴鐩戝惉
褰撳鎴風榪炴帴涓婃潵鐨勬椂鍊? 鍙互璋冪敤tcpServer->nextPendingConnection();鏉ュ厑璁稿鎴風榪炴帴, 騫惰繑鍥炲鎴風鐨剆ocket瀵硅薄
鍙互瀵硅繛鎺ヤ笂鏉ョ殑socket瀵硅薄榪涜淇″彿-妲藉叧鑱? 榪欐牱灝卞彲浠ュ榪欎釜瀹㈡埛绔殑socket瀵硅薄榪涜鏇村鐨勬帶鍒?br />
浜?瀹㈡埛绔?br />浣跨敤QTcpSocket瀵硅薄榪炴帴鍒版湇鍔″櫒
QTcpSocket *tcpSocket = new QTcpSocket(this);
tcpSocket->abort(); //鍙栨秷宸叉湁鐨勮繛鎺?br />tcpSocket->connectToHost(鏈嶅姟鍣╥p, 鏈嶅姟鍣ㄧ鍙?;
鍙互鍏寵仈tcpSocket鐨別rror淇″彿, 榪欐牱榪炴帴澶辮觸鏃跺欏氨鍙互寰楀埌閫氱煡浜?br />鍙互鍏寵仈tcpSocket鐨剅eadyRead()淇″彿, 榪欐牱鎺ユ敹鍒版暟鎹椂鍊欎篃鍙互寰楀埌閫氱煡浜?br />鍚屾牱connected()淇″彿鎻愮ず宸叉垚鍔熻繛鎺ュ埌鏈嶅姟绔?br />disconnected()淇″彿鎻愮ず宸茬粡鏂紑榪炴帴, 鍙互鍏寵仈鍒拌瀵硅薄鐨刣eleteLater()妲戒笂鍒犻櫎榪炴帴(鏈嶅姟绔?
榪欐牱, 鍙寰楀埌閫氳鐨剆ocket瀵硅薄, 鍏寵仈涓涓媟eadyRead()淇″彿灝卞彲浠ヨ鍙栬繛鎺ョ鍙戦佽繃鏉ョ殑鏁版嵁, 鍐欑殑璇濈洿鎺ヨ皟鐢╳rite鏂規硶鍗沖彲
鍐欐暟鎹彂閫佸彲浠ョ敤QByteArray鍜孮DataStream榪涜鎿嶄綔:
QDataStream瀵硅薄鍙互瀵筈ByteArray瀵硅薄榪涜璇誨啓鎿嶄綔
姣斿錛?br />QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_0); //瑕佽緗増鏈? 鐗堟湰鍙瘋鍜屾帴鍙楃璇誨彇鐗堟湰鍙蜂竴鑷?br />out << (quint16)0; //鍐欒鍙戦佹暟鎹殑闀垮害, 榪欓噷鍏堢敤0鍐欏墠闈袱涓瓧鑺傚崰浣? 鍚庨潰鍐嶈ˉ涓婃潵
out << tr("鍙戦佺殑鏁版嵁");
out.device()->seek(0); //鍙堣煩鍒扮紦鍐插尯鐨勫紑澶? 鍑嗗浜涙暟鎹寘鐨勯暱搴?br />out << (quint16)(block.size() - sizeof(quint16));
鐒跺悗浣跨敤榪炴帴濂楁帴瀛楀璞?conObj->write(QByteArray瀵硅薄); 榪欐牱灝辨妸鏁版嵁鍙戦佸嚭鍘諱簡, 濡?br />conObj->write(block);
璇誨彇榪炴帴绔彂閫佽繃鏉ョ殑鏁版嵁
鍚屾牱鐢≦DataStream鏉ュ鐞?
QDataStream in(榪炴帴绔鎺ュ瓧瀵硅薄);
in.setVersion(QDataStream::Qt_4_0); //瑕佸拰鍙戦佺鐨勭増鏈彿涓鑷?br />
qint16 blockSize = 0; //鍒濆鍖?
if(0 == blockSize)
{
if(conSocket->bytesAvailable() < (int)sizeof(quint16)) //濡傛灉宸茬粡鎺ユ敹鍒扮殑鏁版嵁灝忎簬2涓瓧鑺?
{ //璇存槑鏁版嵁榪樻病鎺ユ敹瀹岋紝鐩存帴閫鍑猴紝絳夊緟鏁版嵁鎺ユ敹瀹屽叏
return;
}
in >> bIockSize; //淇濆瓨鏁版嵁鍖呭ぇ灝?涓や釜瀛楄妭)
}
if(conSocket->bytesAvailable() < blockSize)
{//鎺ユ敹鍒扮殑鏁版嵁涓嶅畬鍏?br /> return;
}
in >> message; //QString message; 鎶婃帴鏀跺埌鐨勬暟鎹瓨鏀懼埌message瀵硅薄閲岄潰
榪欐牱灝眔k浜?br />
//鍙栧緱鏈湴ip鍦板潃淇℃伅
QString localHostName = QHostInfo::localHostName();
QHostInfo info = QHostInfo::fromName(localHostName);
qDebug() << "localHostName:" << localHostName << endl
<< "IP Address:" << info.addresses();
]]>
1.鐢≦t Creator鍒涘緩涓涓熀浜嶨UI鐨勫簲鐢ㄧ▼搴? 閫夋嫨鍩虹被鏈塓Widget, QDialog, QMainWindow涓夌. 鍙戠幇涓涓棶棰? 褰撻夋嫨鐢≦Widget, QDialog鏃? 鍙互鐩存帴鍦ㄦ淳鐢熺被鐨勬瀯閫犲嚱鏁伴噷鍒涘緩鎺т歡娣誨姞鍒板竷灞綆$悊鍣ㄥ璞? 鐒跺悗璋冪敤setLayout(甯冨眬綆$悊鍣ㄥ璞?灝卞彲浠ュ湪鐣岄潰鏄劇ず鍒涘緩濂界殑鎺т歡浜? 鐒惰岄夌敤QMainWindow浣滀負鍩虹被鐨勬椂鍊? 榪欐牱鎿嶄綔鍗存病鏈夋樉紺哄嚭鎺т歡鏉? 緇忚繃鐧懼害, 鍙戠幇鍘熸潵媧劇敓綾昏繕瑕佸垱寤轟竴涓猀Widget瀵硅薄, 鎶婂竷灞綆$悊鍣ㄦ斁鍒拌繖涓猀Widget瀵硅薄涓婇潰, 鐒跺悗鎶婅繖涓猀Widget瀵硅薄浣滀負鍙傛暟璋冪敤setCentralWidget灝卞彲浠ユ甯告樉紺烘帶浠朵簡.
2.瑙e喅Qt涓樉紺轟腑鏂囦貢鐮佺殑鏂規硶, 榪欓噷鐩存帴娣誨姞涓や釜鏂規硶鐨勮皟鐢?QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());
3.紿楀彛鏍峰紡
4.md5鍔犲瘑
QCryptographicHash test(QCryptographicHash::MD5);
QByteArray data;
data.append(tr("test"));
test.addData(data);
QByteArray result = test.result();
result.toBase64(); //瀵嗘枃鐢╞ase64緙栫爜
result.toHex(); //鐢?6榪涘埗鏄劇ず鏁版嵁
5.浣跨敤澶氱嚎紼?br />緇ф壙QThread, 閲嶅啓run铏氭柟娉? 濡傛灉浣跨敤綰跨▼浜嬩歡寰幆, 鍦╮un閲岄潰浣跨敤QObject瀵硅薄騫剁敤connect鍏寵仈淇″彿, 闇瑕佸湪鏋勯犲嚱鏁伴噷璋冪敤
6.
wchar_t* wptr = L"test";
QString ret = QString::fromWCharArray(wptr);
QString ret2 = QString((QChar*)wptr, wcslen(wptr));
QString 杞瑆char_t*
wchar_t szBuf[1024];
QString str = tr("hello");
wcscpy_s(reinterpret_cast<wchar_t*>(szBuf),
sizeof(szBuf) / sizeof(wchar_t),
reinterpret_cast<const wchar_t*>(str.utf16()));
7.
8.瀵硅瘽妗嗗睆騫曞眳涓樉紺?br /> quint32 scrheight = QApplication::desktop()->height();
quint32 width = this->width();
quint32 height = this->height();
this->move((scrwidth - width) / 2, (scrheight - height) / 2);
9.鍙戦佷俊鍙風殑鏃跺? 涓浜涚被鍨嬩綔涓哄弬鏁? 闇瑕佹敞鍐?10.rcc璧勬簮鏂囦歡
bin鐩綍涓嬫湁涓猺cc.exe宸ュ叿, 鍙互鍚rc鑴氭湰緙栬瘧鎴恟cc璧勬簮2榪涘埗鏂囦歡, 鍛戒護濡備笅:
rcc -binary xxx.qrc -o xxx.rcc
鍦ㄧ▼搴忎腑寮曠敤榪欎釜rcc璧勬簮鏂囦歡:
QResource::registerResource("xxx.rcc");
鍗歌澆
QResource::unregisterResource("xxx.rcc")
]]>
QMovie *obj = new QMovie("xxx.gif");
labObj->setMovie(obj);
obj->start();
]]>
]]>
鎶婅鍒犵殑鍒犻櫎, 灝眔k浜?br />
璁板緱澶囦喚..
]]>
鎭? 鎬濊礬灝辨槸榪欐牱, 榪欓噷涓婂叧閿唬鐮佸惂
FunSetLayeredWindowAttributes funSetLayeredWindowAttributes;
funSetLayeredWindowAttributes = (FunSetLayeredWindowAttributes)GetProcAddress(GetModuleHandle("user32.dll"), "SetLayeredWindowAttributes");ModifyStyleEx(NULL, 0x80000/*WS_EX_LAYERED*/); //紿楀彛瑕佹湁WS_EX_LAYERED灞炴ф墠鑳界敤璁劇疆閫忔槑鐨勯偅涓狝PI
鍚屾牱, 鍦∣nCancel鏂規硶閲岄潰娣誨姞涓涓畾鏃跺櫒, 欏轟究鎶奍DT_SHOW瀹氭椂鍣ㄧ粰KILL鎺?br />
SetTimer(IDT_EXIT, 50, NULL);
OnTimer鏂規硶榪欐牱鍐?
{
case IDT_SHOW:
funSetLayeredWindowAttributes(this->m_hWnd, 0, m_current % 255, 2);
m_current += 5;
if(m_current >= 255)
KillTimer(IDT_SHOW);
break;
case IDT_EXIT:
m_current -= 5;
funSetLayeredWindowAttributes(this->m_hWnd, 0, m_current % 255, 2);
if(m_current <= 5)
{
CDialog::OnCancel();
KillTimer(IDT_EXIT);
}
break;
}
寰堢畝鍗曞惂, 涓涓貳鍏ユ祬鍑烘晥鏋滃氨鍑烘潵浜?br />
鍙?
static鎺т歡鑳屾櫙閫忔槑
娣誨姞WM_CTLCOLOR娑堟伅鏄犲皠
娣誨姞鍝嶅簲鍑芥暟
瀹炵幇鍝嶅簲鍑芥暟
{
pDC->SetBkMode(TRANSPARENT);
return (HBRUSH)::GetStockObject(NULL_BRUSH);
}
榪欓噷, 灝佽浜嗕竴涓熀綾? 鏂逛究浠ュ悗鐢?br />FadeIODlg.h
class CFadeIODlg : public CDialog
{
DECLARE_MESSAGE_MAP()
public:
CFadeIODlg(UINT uDLGID, CWnd* pParent = NULL);
virtual ~CFadeIODlg();
protected:
virtual void DoDataExchange(CDataExchange* pDX);
virtual void OnCancel();
virtual void OnOK();
afx_msg BOOL OnInitDialog();
afx_msg void OnTimer(UINT nIDEvent);
private:
enum{ TIME_BEGIN = 100, TIME_END = 101};
typedef BOOL (__stdcall *FUNSetLayeredWindowAttributes)(HWND hwnd, COLORREF crKey, BYTE bAlpha, DWORD dwFlags);
FUNSetLayeredWindowAttributes m_funTransparent;
enum{
MAX_TRANSPARENT = 255, //鏈澶ч忔槑搴?/span>
NUM_BEGIN = 10, //寮濮嬭鏃跺櫒鏃墮棿闂撮殧
NUM_END = 10, //緇撴潫璁℃椂鍣ㄦ椂闂撮棿闅?/span>
NUM_CHANGE = 5, //鏀瑰彉閫忔槑搴?/span>
};
int m_currentTransparent; //褰撳墠紿楀彛閫忔槑搴?/span>
};
FadeIODlg.cpp
#include "UI.h"
#include "FadeIODlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
CFadeIODlg::CFadeIODlg(UINT uDLGID, CWnd* pParent /* = NULL */)
: CDialog(uDLGID, pParent)
{}
CFadeIODlg::~CFadeIODlg()
{}
void CFadeIODlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CFadeIODlg, CDialog)
ON_WM_TIMER()
END_MESSAGE_MAP()
BOOL CFadeIODlg::OnInitDialog()
{
CDialog::OnInitDialog();
ModifyStyleEx(0, 0x80000);
m_currentTransparent = 0;
m_funTransparent = (FUNSetLayeredWindowAttributes)GetProcAddress(GetModuleHandle("User32.dll"), "SetLayeredWindowAttributes");
if(m_funTransparent)
{
//m_funTransparent(this->GetSafeHwnd(), 0, 0, 2);
SetTimer(TIME_BEGIN, NUM_BEGIN, NULL);
}
return TRUE;
}
void CFadeIODlg::OnTimer(UINT nIDEvent)
{
switch(nIDEvent)
{
case TIME_BEGIN:
if(m_currentTransparent <= MAX_TRANSPARENT)
{
m_funTransparent(this->GetSafeHwnd(), 0, m_currentTransparent, 2);
m_currentTransparent += NUM_CHANGE;
}
else
KillTimer(TIME_BEGIN);
break;
case TIME_END:
if(m_currentTransparent >= 0)
{
if(m_currentTransparent > MAX_TRANSPARENT)
m_currentTransparent = MAX_TRANSPARENT;
m_funTransparent(this->GetSafeHwnd(), 0, m_currentTransparent, 2);
m_currentTransparent -= NUM_CHANGE;
}
else
{
KillTimer(TIME_END);
CDialog::OnCancel();
}
break;
}
}
void CFadeIODlg::OnOK()
{
}
void CFadeIODlg::OnCancel()
{
if(m_funTransparent)
{
KillTimer(TIME_BEGIN);
SetTimer(TIME_END, NUM_END, NULL);
}
else
CDialog::OnCancel();
}
ok, 瀹屾垚, 浠ュ悗鐩存帴緇ф壙榪欎釜瀵硅瘽妗? 紼嶅井淇敼涓涓? 鏁堟灉灝卞嚭鏉ヤ簡
]]>
]]>
鐒跺悗, 褰撴垜鍦ㄥ璇濇宸ョ▼閫鍑虹殑鏃跺? 鍙戠幇榪欎釜ExitInstance鏂規硶騫舵病鏈夎璋冪敤, 鎴戝氨鏈変簺緋婃秱, baidu+google, ...
鐒跺悗, 鎴戝氨鎯? 鎴戞坊鍔犱竴涓猘pp綾葷殑鏋愭瀯鏂規硶綆椾簡, 浣嗗彂鐜拌繖涓瀽鏋勫嚱鏁拌繕鏄寮傜殑娌¤璋冪敤...
theApp鍘熸湰鏄竴涓叏灞瀵硅薄, 瀹冪殑鏋勯犲拰鏋愭瀯鍘熸湰灝辨槸CRT搴撴潵澶勭悊鐨?br />
鍚庢潵鍙戠幇, 鍙鍦╰heApp瀵硅薄鐨勬垚鍛業nitInstance鏂規硶榪斿洖TRUE(榛樿鏄繑鍥濬ALSE)灝卞彲浠ユ垚鍔熺殑璋冪敤ExitInstance鍜屾瀽鏋勫嚱鏁頒簡
ok, 璇″紓鐨処nitInstance榪斿洖FALSE鍚? 灝變笉浼氳皟鐢╰heApp瀵硅薄鐨勬瀽鏋?
]]>
閰嶇疆濂藉簱鐜鍚? 涓嬮潰鍐欏嚭浣跨敤GDI Plus鐨勫熀鏈楠?
1.鍖呭惈澶存枃浠?br />#include <gdiplus.h>
2.浣跨敤鍚嶅瓧絀洪棿
using namespace Gdiplus;
3.榪炴帴蹇呰鐨勫鍏ュ簱鏂囦歡
#pragma comment(lib, "gdiplus.lib")
4.鍒濆鍖?br />
]]>
google涓涓? 鍘熸潵鍙瑁呬竴涓媠p6琛ヤ竵灝卞ソ浜?br />
榪炴帴鍦板潃
e鏂囩増: vs6sp6
涓枃鐗? vs6sp6
]]>
閫氳繃娣誨姞娑堟伅鍝嶅簲鍑芥暟
afx_msg UINT OnNcHitTest(CPoint point);
娣誨姞瀹?br />ON_WM_NCHITTEST()
鐒跺悗, 瀹氫箟OnNcHitTest鐨勮涓哄嵆鍙? OnNcHitTest鐨勪唬鐮佸涓?
{
CRect rect;
GetClientRect(rect);
ClientToScreen(rect);
if(rect.PtInRect(point))
return HTCAPTION;
return CDialog::OnNcHitTest(point);
}
棣栧厛, 鍙戠敓WM_NCHITTEST娑堟伅鐨勬椂鍊? 紼嬪簭鍏堝彇寰楀鎴峰尯鐨勭獥鍙g煩褰? 榪欓噷鐢ㄥ埌GetClientRect鏂規硶寰楀埌, 鐢變簬GetClientRect鍙栧緱鐨勬槸鐩稿浜庣獥鍙e潗鏍囩郴緇? 浣哋nNcHitTest鐨勫弬鏁皃oint鍗存槸鐩稿浜庡睆騫曠殑鍧愭爣緋葷粺, 鎵浠ヨ繖閲岀敤鍒頒簡ClientToScreen鎶婂彇鍒扮殑瀹㈡埛鍖虹煩褰㈣漿鎴愮浉瀵逛簬灞忓箷鐨勫潗鏍? 鐒跺悗鐢–Rect綾葷殑PtInRect鏂規硶鍒ゆ柇point鏄惁钀藉湪榪欎釜鐭╁艦閲岄潰, 濡傛灉鏄? 鍒欒繑鍥濰TCAPTION(灝辯浉褰撲簬榪欐鐐瑰嚮鏄偣鍑繪爣棰樻爮), 鎵浠? 灝卞彲浠ヨ繖鏍鋒潵鎷栧姩紿楀彛浜? 濡傛灉, OnNcHitTest鐩存帴榪斿洖HTCAPTION鐨勮瘽, 閭d箞, 浣嗙敤鎴風偣鍑婚潪瀹㈡埛鍖虹殑鏃跺? 鏈変簺鍔熻兘浼氬け鏁? 姣斿鐐瑰嚮緋葷粺鐨勫叧闂寜閽? 璇曚竴涓嬪氨浼氬彂鐜拌繖涓寜閽棤鏁堜簡; ok, 濡傛灉鐐瑰嚮鐨勬槸闈炲鎴風, 鑰呯洿鎺ヨ繑鍥濩Dialog::OnNcHitTest(point), 榪欏氨鏄寜榛樿澶勭悊浜?
浠ヤ笂鐨勮繖涓柟娉曟瘮杈冮夯鐑? 鍏跺疄鍙互鏇寸畝鍗曚竴鐐? 鍙鍏堣皟鐢ㄧ埗綾葷殑OnNcHitTest(point), 鍙栧緱榪斿洖鍊? 鍦ㄥ垽鏂槸涓嶆槸HTCLIENT, 濡傛灉鏄? 鍒欒繑鍥濰TCAPTION, 鍚﹀垯鐩存帴榪斿洖鐖剁被OnNcHitTest(point)鐨勮繑鍥炲煎氨ok浜? 淇敼鍚庡涓?
{
UINT uRet = CDialog::OnNcHitTest(point);
if(HTCLIENT == uRet)
return HTCAPTION;
return uRet;
}
鍐嶇畝鍖栦竴涓? 灝辨垚榪欐牱瀛?
{
UINT uRet = CDialog::OnNcHitTest(point);
return (HTCLIENT == uRet) ? HTCAPTION : uRet;
}
]]>
鍒涘緩鍙瓑寰呰鏃跺櫒鍐呮牳瀵硅薄, 鍙互瀹炵幇綾諱技鍔熻兘, 鐜板湪, 涓嬭竟緇欏嚭濡備綍浣跨敤鍙瓑寰呰鏃跺櫒鍐呮牳瀵硅薄
LPCWSTR pszWatchDogName,
DWORD dwPeriod,
DWORD dwWait,
DWORD dwDfltAction,
DWORD dwParam,
DWORD dwFlags
);
2.SetWaitableTimer
__in HANDLE hTimer,
__in const LARGE_INTEGER* pDueTime,
__in LONG lPeriod,
__in_opt PTIMERAPCROUTINE pfnCompletionRoutine,
__in_opt LPVOID lpArgToCompletionRoutine,
__in BOOL fResume
);
CreateWatchDogTimer鍑芥暟灝辨槸鍒涘緩涓涓彲絳夊緟浜嬩歡鍐呮牳瀵硅薄
SetWaitableTimer鍑芥暟灝辨槸璁劇疆鍐呮牳瀵硅薄鐨勮Е鍙戞椂闂村拰鏃墮棿闂撮殧
搴熻瘽涓嶅璇翠簡, 榪欓噷鐩存帴涓婁唬鐮?br />
{
SYSTEMTIME st;
st.wYear = 2012;
st.wDay = 10;
st.wDayOfWeek = 0;
st.wHour = 20;
st.wMilliseconds = 0;
st.wMinute = 16;
st.wMonth = 5;
st.wSecond = 0;
FILETIME localft;
FILETIME utc;
SystemTimeToFileTime(&st, &localft);
LocalFileTimeToFileTime(&localft, &utc);
LARGE_INTEGER liUTC;
liUTC.LowPart = utc.dwLowDateTime;
liUTC.HighPart = utc.dwHighDateTime;
m_Timer = CreateWaitableTimer(NULL, FALSE, NULL);
SetWaitableTimer(m_Timer, &liUTC, 10 * 1000, NULL, NULL, FALSE);
}
void CDialogDemoDlg::ThreadProc2(CDialogDemoDlg* pDlg)
{
while(1)
{
DWORD ret = WaitForSingleObject(pDlg->m_Timer, INFINITE);
if(WAIT_OBJECT_0 == ret)
{
AfxMessageBox("鍙瓑寰呬簨浠跺唴鏍稿璞¤Е鍙?");
}
}
}
ThreadProc2鏄竴涓嚎紼? 褰撴椂闂翠竴鍒? WaitForSingleObject灝變細榪斿洖, 鍥犱負榪欓噷鍒涘緩鐨勬槸涓涓嚜鍔ㄥ浣嶅唴鏍稿璞? 璇翠互WaitForSingleObject榪斿洖鏄細鑷姩鎶婂唴鏍稿璞″浣? 榪欓噷涓烘紨紺? 鍐欎簡涓寰幆, 鎵浠? 涓嬩竴嬈¤皟鐢╓aitForSingleObject鏃? 濡傛灉鏃墮棿鏈埌, 綰跨▼浠葷劧浼氳鎸傝搗.
鍏蜂綋鐢ㄦ硶緇嗚妭, MSDN
鍙傝? windows鏍稿績緙栫▼
]]>
閲嶈澆PostNcDestroy, 闇瑕乨elete鎺塼his鎸囬拡
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CDlgTest)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
virtual void PostNcDestroy();
//}}AFX_VIRTUAL
// Implementation
protected:
// Generated message map functions
//{{AFX_MSG(CDlgTest)
virtual void OnOK();
virtual void OnCancel();
//}}AFX_MSG
{
// TODO: Add extra validation here
}
void CDlgTest::OnCancel()
{
DestroyWindow();
}
void CDlgTest::PostNcDestroy()
{
// TODO: Add your specialized code here and/or call the base class
CDialog::PostNcDestroy();
delete this;
}
]]>
ps:浠ュ悗鐢ˋTL鍐機OM緇勪歡, 鐖芥姝?br />ps:鏈夌┖鎶奀OM鎶鏈唴騫曠湅瀹?br />
]]>
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
FILETIME fTm;
SYSTEMTIME sysTm;
HANDLE hFile;
hFile = CreateFile("d:/test.txt", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, NULL);
if(INVALID_HANDLE_VALUE == hFile)
{
cout << "no" <<endl;
}
GetLocalTime(&sysTm);
sysTm.wYear = 2013;
SystemTimeToFileTime(&sysTm, &fTm);
BOOL bRet = SetFileTime(hFile, &fTm, &fTm, &fTm);
int ret = GetLastError();
if(bRet)
{
cout << "ok" <<endl;
}
return 0;
}
涓昏璋冪敤SystemTimeToFileTime
]]>
int ifoo;
char cfoo[1024] = {"test"};
//...
#pragma data_seg()
.DataSegName READ WRITE SHARE
ps:涔嬪墠鐢ㄦ寚浠?br />
榪欎笉灝辨槸瀵圭紪璇戠殑鏃跺? 緇檒ink.exe紼嬪簭浼犻掍竴涓弬鏁拌屽凡涔?
link /dll /sections:.DataSegName ......
]]>
寰堝鏃跺? 鐪嬩功閮界湅涓嶆噦. 鐜板湪鎴戞噦浜? 涓嶆槸鎴戝お絎ㄤ簡, 鏄洜涓烘湁浜涘熀紜榪樻病鎵撳ソ. 灝卞洜涓鴻繖鏍? 瀛︿範鏂規硶涓嶅澶? 瀵艱嚧浜嗘垜嫻垂浜嗗ソ澶氭椂闂? 鎴戝お2浜? 瀛︿範瑕佸驚搴忔笎榪涘槢, 灝卞ソ姣斾竴涓病紕拌繃鐢佃剳鐨勪漢, 鍙粬涓寮濮嬪氨鍘誨mfc, 閭f槸涓嶅彲鑳界殑. 鑰屾垜鍛? 榪欓亾鐞嗘槸鎳傚緱鐨? 鏈夋椂鍊欏仛浜嬪嵈娌″幓鎯寵繖浠涔堥亾鐞? 浠ヤ負鎯沖, 鏈変功鍙互瀛? 灝辮浜? 緇撴灉鐪嬩簡涔? 紕頒簡涓鑴哥伆, 榪樻妸鑷繁鐨勪俊蹇冪粰紓ㄧ伃浜?澶毦浜? 鎬庝箞鐪嬮兘鐪嬩笉鎳? 鍐嶇綉涓婅窡涓浜涚綉鍙嬩氦嫻? 闈? 浠栦滑閮借兘鐪嬫噦, 鎴戣嚜鍗戝晩~~
鐜板湪鎴戞槑鐧戒簡, 閭f槸鎴戣繕鏈変簺鍩虹娌″榪? 浣嗕粬浠凡緇忓鎵庡疄浜? 鎵浠? 緇忚繃涓浜涘ぉ鐨勫熀紜瀛︿範, 鎴戝啀鏉ュ閭d簺浠ュ墠鐪嬩技寰堥毦鐨勪笢瑗? 鐜板湪瀛﹁搗鏉ュ氨杞繪澗澶氫簡.
(鍜?..鍝ユ枃絎斾笉濂? 涓嶄細鍐欎綔, 浠ヤ笂璇寸殑璇棤浼︽, 綰綋鑷繁緇冪瑪浣滄枃浜? 甯屾湜浠ュ悗鑳藉鍐欑殑濂戒竴鐐? 鍙ュ瓙鐪嬪緱閫氶『涓浜?.....鐫¤浜? 88)
]]>
{
TCHAR szBuf[4096];
GetClassName(hwnd, szBuf, sizeof(szBuf));
string str = szBuf;
if(!str.compare("#32770"))
{
HWND hSubWnd = GetDlgItem(hwnd, 0xffff);
if(hSubWnd)
{
int len = GetWindowText(hSubWnd, szBuf, sizeof(szBuf));
cout << "yes:" <<szBuf <<endl;
}
}
return TRUE;
}
int main()
{
EnumWindows(EnumWindowsProc, NULL);
return 0;
}
]]>
2.瀵逛簬涓涓被鐨勫熀綾葷殑鏁扮洰, c++娌℃湁闄愬埗(鍙互澶氱戶鎵?
涓や釜鍩虹被鏄渶甯歌鐨? 涓涓熀綾誨父甯哥敤浜庤〃紺轟竴涓叡鏈夋娊璞℃帴鍙? 絎簩涓熀綾繪彁渚涙槸鏈夌殑瀹炵幇
浠庣涓変釜鎴栨洿澶氫釜鐩存帴鍩虹被緇ф壙鑰屾潵鐨勬淳鐢熺被閬靛驚mixin-based璁捐椋庢牸
3.鍩虹被鏋勯犲嚱鏁拌璋冪敤鐨勯『搴忎互媧劇敓琛ㄤ腑澹版槑鐨勯『搴忎負鍑?/span>
4.鍦ㄥ緇ф壙涓? 媧劇敓綾誨彲浠ヤ粠涓や釜鎴栬呮洿澶氫釜鍩虹被涓戶鎵垮悓鍚嶇殑鎴愬憳 --鐩存帴璁塊棶鏄簩涔夌殑, 灝嗗鑷寸紪璇戞椂鍒婚敊璇? 鎵浠ヨ鏄劇ず鎸囨槑璋冪敤鍝釜鍩虹被鐨勫摢涓垚鍛?Base::member
5.public媧劇敓琚О涓虹被鍨嬬戶鎵?type inheritance) --媧劇敓綾繪槸鍩虹被鐨勫瓙綾誨瀷
鎻愪緵浜嗚緝涓鑸殑鍩虹被鐨勪竴縐嶇壒鍖?/span>
6.private媧劇敓琚О涓哄疄鐜扮戶鎵?implementation hinheritance) --媧劇敓綾諱笉鐩存帴鏀寔鍩虹被鐨勫叕鏈夋帴鍙? 鎻愪緵浜嗚嚜宸辯殑鍏湁鎺ュ彛, 閲嶇敤鍩虹被鐨勫疄鐜?/span>
private鍩虹被鏀炬槧浜嗕竴縐?騫墮潪鍩轟簬瀛愮被鍨嬪叧緋?鐨勭戶鎵垮艦寮? 鍩虹被鐨勬暣涓叕鏈夋帴鍙e湪媧劇敓綾諱腑鍙樻垚private
7.瀵逛簬is-a瀛愮被鍨嬪叧緋繪潵璇? public緇ф壙鏄竴涓緢鏈夊埄鐨勬満鍒?/span>
8.has-a鍏崇郴涓鑸敱緇勫悎(composition)鑰屼笉鏄戶鎵挎潵鏀寔 --浣夸竴涓被縐頒負鍙︿竴涓被鐨勬垚鍛?/span>
a:濡傛灉鎴戜滑甯屾湜鏀瑰啓涓涓被鐨勮櫄鎷熷嚱鏁? 鍒欏繀欏諱嬌鐢ㄧ鏈夌戶鎵胯屼笉鏄嬌鐢ㄧ粍鍚?/span>
b:濡傛灉鎴戜滑甯屾湜涓涓被鑳藉寮曠敤"涓涓寘鍚縐嶅彲鑳界被鍨嬬殑灞傛緇撴瀯"涓殑涓涓被, 閭d箞灝卞繀欏婚氳繃寮曠敤浣跨敤緇勫悎
c:濡傛灉鍙槸甯屾湜綆鍗曠殑閲嶇敤瀹炵幇, 鍒欐寜鍊肩粍鍚堟瘮緇ф壙鏇村ソ
d:濡傛灉甯屾湜瀵硅薄鐨勮繜緙撳瀷鍒嗛厤, 鎸夊紩鐢?浣跨敤涓涓寚閽?緇勫悎閫氬父鏄竴涓笉鎯崇殑璁捐閫夋嫨
9.鍏嶉櫎(exempting)涓埆鎴愬憳鐨勭鏈夌戶鎵垮獎鍝?/span>
浠ョ鏈夋柟寮忕戶鎵? 鍩虹被鐨勬墍鏈塸rotected鍜宲ublic鎴愬憳鍏ㄨ緇ф壙涓哄瓙綾葷殑縐佹湁鎴愬憳
綾昏璁¤呭彲浠ラ拡瀵瑰熀綾葷殑涓埆鎴愬憳, 鏄叾鍏嶉櫎闈炲叕鏈夋淳鐢熺殑褰卞搷:
class CSub: private CBase {
public:
using CBase::Member;
};
鍏嶉櫎涓埆鎴愬憳鐨勫彟涓涓師鍥犳槸鍏佽鍚庣畫鐨勬淳鐢熺被璁塊棶縐佹湁鍩虹被鐨刾rotected鎴愬憳
媧劇敓綾誨彧鑳藉皢緇ф壙寰楀埌鐨勬垚鍛樻仮澶嶅埌鍘熸潵鐨勮闂駭鍒? 璇ヨ闂駭鍒笉鑳芥瘮鍩虹被涓師鏉ユ寚瀹氱殑綰у埆鏇翠弗鏍兼垨鏇翠笉涓ユ牸
10.protected緇ф壙 --鍩虹被鐨勬墍鏈夊叕鏈夋垚鍛橀兘鎴愪負媧劇敓綾葷殑protected鎴愬憳
11.瀵硅薄緇勫悎鏈変袱縐嶅艦寮?/span>
a:鎸夊肩粍鍚?Composition by value)
b:鎸夊紩鐢ㄧ粍鍚?Composttion by reference)
12.铏氭嫙緇ф壙(virtual inheritance) --鍦ㄨ櫄鎷熺戶鎵夸笅, 鍙湁涓涓叡浜殑鍩虹被瀛愬璞¤緇ф壙, 鑰屾棤璁鴻鍩虹被鍦ㄦ淳鐢熷眰嬈′腑鍑虹幇澶氬皯嬈?/span>
鍏變韓鐨勫熀綾誨瓙瀵硅薄琚О涓鴻櫄鎷熷熀綾?vitual base class)
鍦ㄨ櫄鎷熺戶鎵夸笅, 鍩虹被瀛愬璞$殑澶嶅埗鍙婄敱姝ゅ紩璧風殑浜屼箟鎬ч兘琚彇娑堜簡
13.铏氭嫙緇ф壙鐨勮娉?
CSub: public virtual CBase1, public virtual CBase2 {...};
virtual 鍜?public鐨勯『搴忎笉閲嶈
]]>
2.c++閫氳繃綾繪淳鐢?class derivation)鐨勬満鍒舵潵鏀寔緇ф壙
3.鍩虹被(base class)
4.媧劇敓綾?derived class)
5.鍩虹被鍜屾淳鐢熺被瀹炰緥鐨勯泦鍚堢О涓虹被緇ф壙灞傛緇撴瀯(hierarchy)
6.濡傛灉鍩虹被鍜屾淳鐢熺被鍏變韓鐩稿悓鐨勫叡鏈夋帴鍙? 鍒欐淳鐢熺被琚О鍋氬熀綾葷殑瀛愮被鍨?subtype)
7.鍩虹被鎸囬拡鎴栧紩鐢ㄥ彲浠ョ洿鎺ュ紩鐢ㄥ叾浠諱綍媧劇敓鐨勭被, 澶氭?polymorphism)
8.鍦ㄨ繍琛屾椂鍒婚渶瑕佽В鏋愬嚭琚皟鐢ㄧ殑鍑芥暟, 榪欎釜瑙f瀽榪囩▼琚О涓哄姩鎬佺粦瀹?dynamic bindng) --緙虹渷鎯呭喌涓? 鍑芥暟瀹炲湪緙栬瘧鏃跺埢琚潤鎬佽В鏋愮殑
9.c++涓? 閫氳繃涓縐嶈縐頒負铏氭嫙鍑芥暟(virtual function)鐨勬満鍒舵潵鏀寔鍔ㄦ佺粦瀹? 閫氳繃闆嗘垚鍜屽姩鎬佺粦瀹? 瀛愮被鍨嬪鎬佹т負闈㈠悜瀵硅薄鐨勭▼搴忚璁℃彁渚涗簡鍩虹
10.闈㈠悜瀵硅薄鐨勭▼搴忚璁℃彁渚涗簡涓縐嶆柟妗? 鎶婄被鍨嬭В鏋愮殑璐熸媴浠庣▼搴忓憳鐨勮韓涓婅漿縐誨埌緙栬瘧鍣ㄤ笂
11.綾葷戶鎵垮眰嬈$粨鏋勭殑涓昏濂藉鏄? 鎴戠洘鍙互閽堝鎶借薄鍩虹被鐨勫叡鏈夋帴鍙h繘紼嬬紪紼? 鑰屼笉鏄拡瀵圭粍鎴愮戶鎵垮眰嬈$殑涓埆綾誨瀷
鐢ㄦ埛浠g爜鍙互涓嶅彈璇█鍙樺寲鐨勫獎鍝?--澶氭佸拰鍔ㄦ佺粦瀹?/span>
12.鍦╟++涓? 澶氭佹у彧瀛樺湪浜庡瓙綾葷戶鎵垮眰嬈′腑 --void*鍨嬬殑鎸囬拡鍙互琚弿榪頒負澶氭? 浣嗘槸璇█鏈韓騫舵病鏈夋樉紺虹殑鏀寔浠栦滑, 蹇呴』鐢辯▼搴忓憳鑷繁鏉ョ鐞?/span>
c++璇█閫氳繃鍑犵鏂瑰紡鏀寔澶氭佹?/span>
閫氳繃涓涓殣寮忚漿鎹? 浠?媧劇敓綾繪寚閽堟垨寮曠敤"杞埌"鍏跺叡鏈夊熀綾葷被鍨嬬殑鎸囬拡鎴栧紩鐢?
閫氳繃铏氭嫙鍑芥暟鐨勬満鍒?/span>
閫氳繃dynamic_cast鍜宼ypeid鎿嶄綔絎?/span>
if(SubClass* pSub = dynamic_cast<SubClass*>(pObj)) ...
13.鎶借薄鍩虹被(abstract base class)
14.瀹炰綋鍩虹被(concrete base class)
15.綰櫄鎷熷嚱鏁?pure virtual function)
16.瑕嗙洊(override)
17.c++璇█涓烘垜浠彁渚涗簡涓縐嶈娉曠粨鏋? 閫氳繃瀹冨彲浠ユ寚鏄? 涓涓櫄鎷熷嚱鏁板彧鏄彁渚涗簡涓涓彲浠ヨ瀛愮被鏀瑰啓鐨勬帴鍙?/span>
18.浼犻掔粰緙虹渷鍑芥暟鐨勫間笉鏄湪榪愯鏃跺埢鍐沖畾, 鑰屾槸鍦ㄧ紪璇戞椂鍒繪牴鎹璋冪敤鍑芥暟鐨勫璞$殑綾誨瀷鍐沖畾
19.铏氭嫙鏋愭瀯鍑芥暟 --涓昏鏄負浜嗚兘澶熺敤delete閿姣佸熀綾葷殑鏃跺欎篃鑳藉淇濊瘉璋冪敤媧劇敓綾葷殑鏋愭瀯鍑芥暟, 瑕佷笉鐒跺畠鍙槸璋冪敤鍩虹被鐨勬瀽鏋勫嚱鏁拌屽凡
]]>
2.浣嶅崟涓被鍨嬫彁渚涙墜宸ョ敓鎴愮殑鎷瘋礉鏄竴涓棤浼戞鐨勮繃紼? 涔熸槸涓涓棤闄愬鏉傜殑緇存姢榪囩▼
3.妯℃澘鍙傛暟琛?template parameter list) --template<xxx> xxx灝辨槸妯℃澘鍙傛暟琛?/span>
4.妯℃澘鐨勭被鍨嬪弬鏁?type parameter)鐢卞叧閿瓧class鎴栧叧閿瓧typename鍙婂叾鍚庣殑琛ㄧず絎︽瀯鎴?/span>
5.姣忎釜妯℃澘鍙傛暟鍓嶉潰閮藉繀欏繪湁鍏抽敭瀛梒lass鎴杢ypename
6.妯℃澘闈炵被鍨嬪弬鏁?nontype parameter)鐢變竴涓櫘閫氬弬鏁板0鏄庢瀯鎴? 涓涓潪綾誨瀷鍙傛暟鍙槸璇ュ弬鏁頒唬琛ㄤ簡涓涓綔鍦ㄧ殑鍊? 鑰岃繖涓煎張浠h〃綾繪ā鏉垮畾涔変腑鐨勪竴涓弬閲?
template<class Type, int size = 1024>
class Buffer;
//濡傛灉妯℃澘瀹炰緥鐨勫悕瀛楁病鏈夋寚瀹欱uffer鐨勫ぇ灝? 鍒欏疄渚嬪寲Buffer鐨勫ぇ灝忔槸1024
7.綾誨瀷杞崲鐨勮繃紼嬭縐頒負妯℃澘瀹炰緥鍖?template instantiation)
浠庨氱敤鐨勭被妯℃澘瀹氫箟涓敓鎴愮被鐨勮繃紼?/span>
8.妯℃澘鍙傛暟鐨勭己鐪佸?/span>
template<class Type = string, int size>
class Buffer;
9.綾繪ā鏉挎垚鍘熷嚱鏁板彲浠ュ啀綾繪ā鏉跨殑瀹氫箟涓畾涔? 璇ユ垚鍛樺嚱鏁版槸inline鎴愬憳鍑芥暟; 涔熷彲浠ュ畾涔夊湪綾繪ā鏉垮畾涔変箣澶?/span>
10.c++鐨勬ā鏉跨紪璇戞ā寮?template compilation model)
]]>
2.c++瑕佹眰, 璧嬪?=), 涓嬫爣([]), 璋冪敤(()), 鍜屾垚鍛樿闂澶?->)鎿嶄綔絎﹀繀欏昏瀹氫箟紼崇被鎴愬憳鎿嶄綔絎? 浠諱綍鎶婅繖浜涙搷浣滅瀹氫箟涓哄悕瀛楃┖闂存垚鍛樼殑瀹氫箟閮戒細琚?/span>
鏍囪涓虹紪璇戞椂鍒婚敊璇?/span>
3.c++棰勫畾涔夊彲閲嶈澆鐨勬搷浣滅:
+ - * / % ^ & | ~
! , = < > <= >= ++ --
<< >> == != && || += -= /=
%= ^= &= |= *= <<= >>= [] ()
-> ->* new new[] delete delete[]
4.瀵逛簬鍐呯疆綾誨瀷鐨勬搷浣滅, 瀹冪殑棰勫畾涔夋剰涔変笉鑳借鏀瑰彉
5.棰勫畾涔夌殑鎿嶄綔絎︿紭鍏堢駭涓嶈兘琚敼鍙?/span>
6.闄や簡operator()澶? 瀵瑰叾浠栭噸杞芥搷浣滅鎻愪緵緙虹渷瀹炲弬閮芥槸闈炴硶鐨?/span>
operator)鐨勫畾涔?/span>
2.new綾誨璞?--鍙湁new琛ㄨ揪寮忔垚鍔熺殑鐢寵鍒扮┖闂村唴瀛? 鏋勯犲嚱鏁版墠浼氳璋冪敤
3.鏋勯犲嚱鏁板畾涔変負inline鏃? 鍒涘緩瀵硅薄鏄細鍦ㄨ皟鐢ㄧ偣灞曞紑鏋勯犲嚱鏁?/span>
4.鎴愬憳鍒濆鍖栧垪琛?member initialization list)
5.鏋勯犲嚱鏁頒笉鑳界敤const鎴杤olatile鍏抽敭瀛楁潵澹版槑
涓涓猚onst綾誨璞″湪"浠庡叾鏋勯犲嚱鏁板畬鎴愬埌鏋愭瀯鍑芥暟寮濮?榪欐鏃墮棿鍐呮墠琚涓烘槸const, volatile綾誨璞′篃涓鏍?/span>
6.explicit淇グ絎﹂氱煡緙栬瘧鍣ㄤ笉瑕佹彁渚涢殣寮忚漿鎹?/span>
void print(const CTest &test);
//...
print("oops"); //榪欑璋冪敤浼氭妸"oops"杞崲鎴愪竴涓狢Test瀵硅薄
緙虹渷鎯呭喌涓? 鍗曞弬鏁版瀯閫犲嚱鏁?鎴栬呮湁澶氫釜鍙傛暟, 闄や簡絎竴涓弬鏁板, 鍏朵粬閮芥湁緙虹渷瀹炲弬)琚敤浣滆漿鎹㈢
鏃犳剰鐨勯殣寮忕被杞崲, 鏄緢闅捐窡韙殑閿欒!, 鍏抽敭瀛梕xplicit琚紩鍏ュ埌鏍囧噯c++涓? 浠ュ府鍔╂垜浠姂鍒惰繖縐嶄笉鍙楁榪庣殑緙栬瘧杈呭姪琛屼負
explicit鍙兘琚簲鐢ㄥ湪鏋勯犲嚱鏁頒笂
7.緙虹渷鏋勯犲嚱鏁版槸涓嶉渶瑕佺敤鎴鋒寚瀹氬疄鍙傚氨鑳藉琚皟鐢ㄧ殑鏋勯犲嚱鏁? --騫朵笉鎰忓懗鐫瀹冧笉鑳芥帴鍙楀疄鍙? 鍙剰鍛崇潃鏋勯犲嚱鏁扮殑姣忎釜鍙傛暟閮芥湁涓涓己鐪佸間笌涔嬪叧鑱?/span>
8.闄愬埗瀵硅薄鍒涘緩 --鎶婄浉鍏蟲瀯閫犲嚱鏁版斁鍒伴潪鍏湁璁塊棶鍖哄唴, 浠庤岄檺鍒舵垨鏄劇ず紱佹鏌愪簺褰㈠紡鐨勫鍒涘緩鍔ㄤ綔
鍦ㄥ疄闄呯殑c++紼嬪簭涓? 闈炲叕鏈夌殑鏋勯犲嚱鏁頒富瑕佺敤澶勬槸:
闃叉鐢ㄤ竴涓被瀵硅薄鎯寵綾誨彟涓涓璞″仛鎷瘋礉
鎸囧嚭鍙湁褰撲竴涓被鍦ㄧ戶鎵垮眰嬈′腑琚敤浣滃熀綾? 鑰屼笉鑳界洿鎺ヨ搴旂敤紼嬪簭鎿嶇旱鏃? 鏋勯犲嚱鏁版墠鑳借璋冪敤
9.鎷瘋礉鏋勯犲嚱鏁?--鐢ㄤ竴涓被瀵硅薄鍒濆鍖栬綾葷殑鍙︿竴涓璞¤縐頒負緙虹渷鎸夋垚鍛樺垵濮嬪寲(default memberwise initialization)
涓涓被瀵硅薄鎯寵綾葷殑鍙︿竴涓璞′綔鎷瘋礉鏄氳繃渚濇鎷瘋礉姣忎釜闈為潤鎬佹暟鎹垚鍛樻潵瀹炵幇
綾昏璁¤呭彲浠ラ氳繃鎻愪緵鐗規畩鐨勬嫹璐濇瀯閫犲嚱鏁?copy constructor)鏉ユ敼鍙樼己鐪佺殑琛屼負
鎷瘋礉鏋勯犲嚱鏁頒笉涓瀹氭槸const, 浣嗗畠鍗村繀欏繪槸寮曠敤
10.鏃犺浣曟椂, 褰撳湪涓涓嚱鏁板唴鍒犻櫎涓涓嫭绔嬬殑鍫嗗璞℃椂, 鏈濂戒嬌鐢╝uto_ptr綾誨璞¤屼笉鏄竴涓疄闄呯殑鎸囬拡
濡傛灉delete琛ㄨ揪寮忓け璐? 濡備竴涓紓甯歌鎶涘嚭, 浼氬埌鏃跺唴瀛樻硠闇?寮傚父鎶涘嚭, 璺寵繃浜哾elete鎿嶄綔?), 涓嶄細璋冪敤鏋愭瀯鍑芥暟
鎵浠ュ緩璁敤auto_ptr鏅鴻兘鎸囬拡
11.瀵逛簬鍦ㄥ爢涓垎閰嶇殑綾誨璞℃暟緇勭殑鍏冪礌, 鎴戜滑娌℃湁鍔炴硶鎻愪緵涓緇勬樉紺虹殑鍊兼潵鍋氬垵濮嬪寲, 濡傛灉緇嗗寲鏀寔閫氳繃new琛ㄨ揪寮忓垎閰嶆暟緇? 鍒欑被蹇呴』鎻愪緵涓涓己鐪佺殑鏋?/span>
閫犲嚱鏁? 鎴栦笉鎻愪緵鏋勯犲嚱鏁?/span>
12.鐢ㄤ竴涓被瀵硅薄鍒濆鍖栧彟涓涓被瀵硅薄, 縐頒負鎸夋垚鍛樺垵濮嬪寲(default memberwise initialization)
鍙戠敓鍦?鐢ㄤ竴涓被瀵硅薄鏄劇ず鐨勫垵濮嬪寲鍙︿竴涓璞?/span>
鎶婁竴涓被瀵硅薄浣滀負瀹炲弬浼犻掔粰涓涓嚱鏁?/span>
鎶婁竴涓被瀵硅薄浣滀負涓涓嚱鏁扮殑榪斿洖鍊間紶閫掑洖鏉?/span>
闈炵┖欏哄簭瀹瑰櫒綾誨瀷鐨勫畾涔?/span>
鎶婁竴涓被瀵硅薄鎻掑叆鍒頒竴涓鍣ㄧ被鍨嬩腑
13.鎴愬憳綾誨璞″垵濮嬪寲
14.緙虹渷鎸夋垚鍛樿祴鍊?default memberwise assignment) --鐢ㄤ竴涓被瀵硅薄鍚戣綾葷殑鍙︿竴涓璞$殑璧嬪兼搷浣?/span>
鐢ㄩ殣寮忕殑鎷瘋礉璧嬪兼搷浣滅
涓鑸潵鎵, 濡傛灉緙虹渷鐨勬寜鎴愬憳鍒濆鍖栧浜庝竴涓被涓嶅悎閫? 鍒欑己鐪佺殑鎸夋垚鍛樿祴鍊間篃涓嶅悎閫?/span>
閫氳繃鎻愪緵涓涓幇瀹炵殑鎷瘋礉璧嬪兼搷浣滅鐨勫疄渚? 鍙互鏀瑰彉緙虹渷鐨勬寜鎴愬憳璧嬪?/span>
娉ㄦ剰瑕侀槻姝竴涓被瀵硅薄鍚戣嚜宸辮祴鍊?--瀵逛簬"鍏堥噴鏀句笌璇ュ璞″綋鍓嶇浉鍏崇殑璧勬簮, 浠ヤ究鍒嗛厤涓庤鎷瘋礉瀵硅薄鐩稿叧璧勬簮"榪欐牱鐨勬嫹璐濊祴鍊兼搷浣滅, 鎷瘋礉鑷韓灝ゅ叾涓?/span>
1.mfc鏀寔涓ょ綰跨▼
鐢ㄦ埛鐣岄潰綰跨▼
宸ヤ綔綰跨▼
2.mfc涓墍鏈夌嚎紼嬮兘鏄敱CWinThread瀵硅薄琛ㄧず
CWinThread鏄敤鎴鋒帴鍙g嚎紼嬬殑鍩虹被, CWinApp灝辨槸浠嶤WinThread媧劇敓鍑烘潵鐨?/span>
鍦ㄥ啓鐢ㄦ埛鎺ュ彛綰跨▼鏃? 涔熻浠嶤WinThread綾繪淳鐢熷嚭鑷繁鐨勭嚎紼嬬被
鍙互璋冪敤AfxBeginThread鍑芥暟, 浼氬垱寤篊WinThread瀵硅薄
3.緙栧啓鏄兂宸ヤ綔綰跨▼鐨勬帶鍒跺嚱鏁? 鎺у埗鍑芥暟鐨勫師鍨?
UINT ControlFunctionName(LPVOID pParam); //綰跨▼鍥炶皟
4.綰跨▼璋冪敤AfxBeginThread鍑芥暟灝卞彲浠ュ垱寤烘柊鐨勭嚎紼?/span>
5.鍒涘緩騫跺惎鍔ㄥ伐浣滅嚎紼?
CWinThread* AfxBeginThread(
AFX_THREADPROC pfnThreadProc,
LPVOID pParam,
int nPriority = THREAD_PRIORITY_NORMAL,
UINT nStackSize = 0,
WORD dwCreateFlags = 0,
LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL);
6.AfxEndThread緇堟綰跨▼
7.鍒涘緩鐢ㄦ埛鐣岄潰綰跨▼
浠嶤WinThread綾繪淳鐢熷嚭鑷繁鐨勭嚎紼嬬被
鏀歸犺繖涓被
鍚姩鐢ㄦ埛鐣岄潰
8.鍩虹被鐨勪竴浜涙垚鍛樺嚱鏁?
ExitInstance, 褰撶嚎紼嬮鍑烘槸, 浼氳皟鐢ㄦ墽琛屾竻鐞嗗伐浣?/span>
InitInstance, 鎵ц綰跨▼綾誨疄渚嬪垵濮嬪寲, 瀛愮被蹇呴』閲嶅啓
OnIdle, 鎵ц綰跨▼鐗瑰畾絀洪棽鏃墮棿澶勭悊
PreTranslateMessage, 榪囨護娑堟伅
Run, 鎵ц綰跨▼鍑芥暟
9.AfxBeginThread鍑芥暟鐨勫彟涓涓噸杞藉師鍨?(鐣岄潰綰跨▼)
CWinThread* AfxBeginThread(
CRuntimeClass* pThreadClass, //鐢≧UNTIME_CLASS瀹忓皢綰跨▼綾繪寚閽堣漿鎹負鎸囧悜CRuntimeClass瀵硅薄鎸囬拡
int nPriority = THREAD_PRIORITY_NORMAL,
UINT nStackSize = 0;
DWORD dwCreateFlags = 0,
LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL
);
10.緇堟綰跨▼
姝e父緇堟綰跨▼ VOID PostQuitMessage(int nExitCode);
鎻愬墠緇堟綰跨▼ 鍦ㄧ嚎紼嬪唴璋冪敤AfxEndThread鍑芥暟 VOID AfxEndThread(UINT nExitCode);
11.綰跨▼鍚屾鎶鏈?/span>
淇″彿閲?--闄愬埗浣跨敤鍏變韓璧勬簮鐨勭嚎紼嬫暟鐩?/span>
CSemaphore g_Sem(5, 5); 鏃墮棿鍐呮渶澶氬彧鏈?涓嚎紼嬭兘鍏變韓璧勬簮, 榪樺垵濮嬪紑濮嬫椂娌℃湁綰跨▼鑾峰緱淇″彿璧勬簮
涓鏃︾嚎紼嬭闂叡浜祫婧? 淇″彿閲忚鏁板櫒灝卞噺1, 鑻ュ彉涓?, 鍒欎笅鏉ュ璧勬簮鐨勮闂氨浼氳鎷掔粷, 鐭ラ亾鎸佹湁鐨勮祫婧愮嚎紼嬮噴鏀句簡璧勬簮鐨勬寔鏈夋潈
浜掓枼瀵硅薄 --鍐呮牳瀵硅薄
涓寸晫鍖?--鐢ㄦ埛妯″紡瀵硅薄 寮勪笉濂藉氨瀹規槗鍑虹幇姝婚攣, 涓嶈繃鐢ㄨ搗鏉ュ緢綆鍗? 鍙湁4涓狝PI
InitializeCriticalSection, EterCreiticalSection, LeveCriticalSection, DeleteCriticalSection
浜嬩歡瀵硅薄 --鍐呮牳瀵硅薄 鍒嗘敹宸ラ噸緗璞″拰鑷姩閲嶇疆瀵硅薄
鍛?/span>
10.綾葷殑瀹氫箟涓嶄細寮曡搗瀛樺偍鍖哄垎閰? 鍙湁褰撳畾涔変竴涓被鐨勫璞℃椂, 緋葷粺鎵嶄細鍒嗛厤瀛樺偍鍖?/span>
11.姣忎釜綾繪垚鍛樺嚱鏁扮殑鎷瘋礉鍙湁涓浠?/span>
12.鎶婁竴涓垚鍛樺嚱鏁板0鏄庝負const鍙互淇濊瘉榪欎釜鎴愬憳鍑芥暟涓嶄慨鏀圭被鐨勬暟鎹垚鍛? 浣嗘槸, 濡傛灉璇ョ被鍚湁鎸囬拡, 閭d箞鍦╟onst鎴愬憳鍑芥暟涓氨鑳戒慨鏀規寚閽堟墍鎸囩殑瀵硅薄,
緙栬瘧鍣ㄤ笉浼氭嫻嬩負閿欒, 榪欏父甯鎬護c++鍒濆鑰呭悆鎯?/span>
13.涓轟簡鍏佽淇敼涓涓被鐨勬暟鎹垚鍛? 鍗充嬌瀹冩槸涓涓猚onst瀵硅薄鐨勬暟鎹垚鍛? 鎴戜滑涔熷彲浠ユ妸鏀規暟鎹垚鍛樺0鏄庝負mutable(鏄撳彉鐨?. mutable鏁版嵁鎴愬憳姘歌繙涓嶄細鏄?/span>
const鎴愬憳, mutable鎴愬憳涓彲浠ヨ鏇存柊
14.姣忎釜綾繪垚鍛樺嚱鏁伴兘鍚湁涓涓寚鍚戣璋冪敤瀵硅薄鐨勬寚閽? 榪欎釜鎸囬拡琚О涓簍his:
鍦ㄩ潪const鎴愬憳鍑芥暟涓? 瀹冪殑綾誨瀷鏄寚鍚戣綾葷被鍨嬬殑鎸囬拡
鍦╟onst鎴愬憳鍑芥暟涓? 鏄寚鍚慶onst綾葷被鍨嬬殑鎸囬拡
鍦╲olatile鎴愬憳鍑芥暟涓? 鏄寚鍚憊olatile綾葷被鍨嬬殑鎸囬拡
15.綾葷殑闈欐佹垚鍛樿褰撳仛璇ョ被綾誨瀷鐨勫叏灞瀵硅薄, 瀵逛簬闈為潤鎬佹垚鍛? 姣忎釜綾誨璞¢兘鏈夎嚜宸辯殑鎷瘋礉, 鑰岄潤鎬佹暟鎹垚鍛樺姣忎釜綾葷被鍨嬪彧鏈変竴涓嫹璐? 闈欐佹暟鎹垚鍛樺彧
鏈変竴浠? 璇ョ被綾誨瀷瀵規墍鏈夊璞″叡浜闂?/span>
16.鍚屽叏灞瀵硅薄鐩告瘮, 浣跨敤闈欐佹暟鎹垚鍛樻湁涓や釜浼樺娍:
闈欐佹暟鎹垚鍛樻病鏈夎繘鍏ョ▼搴忕殑鍏ㄥ眬鍚嶅瓧絀洪棿
鍙互瀹炵幇淇℃伅闅愯棌, 闈欐佹垚鍛樺彲浠ユ槸private鎴愬憳, 鑰屽叏灞瀵硅薄涓嶈兘
17.闈欐佹暟鎹垚鍛樼殑綾誨瀷鍙互鏄叾浠栨墍灞炵被, 鑰岄潪static鏁版嵁鎴愬憳鍙兘琚0鏄庝負璇ョ被鐨勫璞$殑鎸囬拡鎴栧紩鐢?/span>
18.闈欐佹暟鎹垚鍛樺彲浠ヨ浣滀負綾繪垚鍛樺嚱鏁扮殑緙虹渷瀹炲弬, 鑰岄潪static鎴愬憳涓嶈兘
19.闈欐佹垚鍛樺嚱鏁扮殑澹版槑闄や簡鍦ㄧ被浣撲腑鐨勫嚱鏁板0鏄庡姞涓婂叧閿瓧static, 浠ュ強涓嶈兘澹版槑涓篶onst鎴杤olatile涔嬪, 涓庨潪闈欐佹垚鍛樺嚱鏁扮浉鍚? 鍑虹幇鍦ㄧ被浣撳鐨勫嚱鏁?/span>
瀹氫箟涓嶈兘鎸囧畾鍏抽敭瀛梥tatic
20.闈欐佹垚鍛樻病鏈塼his鎸囬拡
21.綾繪垚鍛樼殑鎸囬拡蹇呴』鎬繪槸閫氳繃鐗瑰畾鐨勫璞℃垨鎸囧悜璇ョ被綾誨瀷鐨勫璞$殑鎸囬拡鏉ヨ闂?/span>
閽堝綾誨璞″拰寮曠敤鐨?*
閽堝鎸囧悜綾誨璞$殑鎸囬拡鐨?>*
22.瀹氫箟涓涓垚鍛樺嚱鏁版寚閽堥渶瑕佸埗瀹氬嚱鏁拌繑鍥炵被鍨? 鍙傛暟琛ㄥ拰綾?
int (CTest::*)();
int (CTest::*pmf)() = &CTest::test;
pmf = &CTest::test2;
23.闈欐佺被鎴愬憳灞炰簬璇ョ被鐨勫叏灞瀵硅薄鍜屽嚱鏁?/span>
24.鑱斿悎:涓縐嶈妭鐪佺┖闂寸殑綾?/span>
浣跨敤union鏄嵄闄╃殑, 閫氳繃涓涓笉閫傚綋鐨勬暟鎹垚鍛樹互涓虹殑鑾峰彇鍒板綋鍓嶅瓨鍌ㄥ湪union涓殑鍊糫
25.c++鏍囧噯搴撴彁渚涗簡涓涓猙itset綾繪ā鏉? 瀹冨彲浠ヨ緟鍔╂搷浣滀綅鐨勯泦鍚? 鍦ㄥ彲鑳界殑鎯呭喌涓? 搴斿敖鍙兘浣跨敤瀹冩潵鍙栦唬浣嶅煙
26.涓涓被鍙互鍦ㄥ彟涓涓被涓畾涔? 榪欐牱鐨勭被琚О涓哄祵濂楃被(nested class)
宓屽綾繪槸鍏跺鍥寸被鐨勪竴涓垚鍛?/span>
27.綾諱篃鍙互瀹氫箟鍦ㄥ嚱鏁頒綋鍐? 榪欐牱鐨勭被琚О涓哄眬閮ㄧ被(local class)
灞閮ㄧ被鐨勬垚鍛樺嚱鏁板繀欏昏瀹氫箟鍦ㄧ被瀹氫箟涓? 榪欏氨鎶婂眬閮ㄧ被鐨勬垚鍛樺嚱鏁扮殑澶嶆潅鎬ч檺鍒跺湪鍑犺浠g爜涓?/span>
瀵硅薄涓?br />5.catch-all
try {
....
}
catch(...) {} //catch-all鏍煎紡
6.catch瀛愬彞琚鏌ョ殑欏哄簭涓庡畠浠湪try鍧椾箣鍚庡嚭鐜扮殑欏哄簭鐩稿悓, 涓鏃︽壘鍒頒簡涓涓尮閰? 鍒欏悗緇殑catch瀛愬彞灝嗕笉鍐嶆鏌?br />7.寮傚父瑙勮寖(exception specification)
void foo() throw(Object); //榪欑澹版槑灝辨槸寮傚父瑙勮寖
寮傚父澹版槑鏄嚱鏁版帴鍙g殑涓閮ㄥ垎
8.寮傚父瑙勮寖涓嶅厑璁擱噸琚姏鍑虹殑寮傚父綾誨瀷鍒板紓甯歌鑼冨埗瀹氱殑綾誨瀷涔嬮棿鐨勮漿鎹?
void foo() throw(string) {
....
throw "exception"; //涓嶅厑璁鎬粠const char* 鍒皊tring鐨勮漿鎹? 姝ゆ椂璋冪敤unexpected()
throw string("exception"); //鍙互
}
鍖呭惈緙栬瘧妯″紡涓? 鍦ㄦ瘡涓ā鏉胯瀹炰緥鍖栫殑鏂囦歡涓寘鍚嚱鏁版ā鏉跨殑瀹氫箟, 騫朵笖寰寰鎶婂畾涔夋斁鍦ㄥご鏂囦歡涓? 鍚戝鍐呰仈鍑芥暟宸﹂偅鏍?/span>
--緙虹偣: 鍑芥暟妯℃澘浣?body)鎻忚堪浜嗗疄鐜扮粏鑺?/span>
鍒嗙緙栬瘧妯″紡涓? 鍑芥暟妯℃澘澹版槑鏀懼湪澶存枃浠朵腑, 鍑芥暟妯℃澘瀹氫箟鏀懼湪cpp鏂囦歡閲?/span>
//.h
template <typename Type> Type min(Type t1, Type t2);
//.cpp
export template <typename Type>
Type min(Type t1, Type t2) { /* ... */ }
//鍏抽敭瀛?export! 鍙鍑虹殑妯℃澘
//騫朵笉鏄墍鏈夌殑緙栬瘧鍣ㄩ兘鏀寔鍒嗙妯″紡
鏌ュ埌鏂囦歡涔嬮棿鐨勭被鍨嬭繚渚? 榪欎簺綾誨瀷榪濅緥鍙兘鏄▼搴忎弗閲嶉敊璇殑鏍規簮
10.澶存枃浠朵負鎵鍚慹xtern瀵硅薄澹版槑, 鍑芥暟澹版槑浠ュ強inline鍑芥暟瀹氫箟鎻愪緵浜嗕竴涓泦涓殑浣嶇疆: 榪欒縐頒綔澹版槑鐨勫眬閮ㄥ寲(localization)
11.澶存枃浠舵彁渚涗簡涓や釜瀹夊叏淇濊瘉
淇濊瘉鎵鏈夋枃浠墮兘鍖呭惈鍚屼竴涓叏灞瀵硅薄鎴栧嚱鏁扮殑鍚屼竴浠藉0鏄?br />
濡傛灉闇瑕佷慨鏀瑰0鏄? 鍒欏彧闇瑕佹敼鍙樹竴涓ご鏂囦歡
--鍙湪鏈琧pp鐢ㄧ殑鍏ㄥ眬鍑芥暟, 璇ヤ笉璇ュ畾涔夊湪澶存枃浠墮噷闈?
12.灞閮ㄥ璞?local object)
鑷姩瀵硅薄(automatic object) --紼嬪簭榪愯鏍?br />
瀵勫瓨鍣ㄥ璞?register object) --濡傛灉鎵閫夋嫨鐨勫彉閲忚棰戠箒浣跨敤, 鍒欏瘎瀛樺櫒鍙橀噺鍙互鎻愰珮鍑芥暟鐨勬墽琛岄熷害
灞閮ㄩ潤鎬佸璞?local static object)
13.褰撲竴涓嚜鍔ㄥ彉閲忕殑鍦板潃鍛楀瓨鍌ㄥ湪涓涓敓鍛芥湡闀夸笌瀹冪殑鎸囬拡鏃? 璇ユ寚閽堣縐頒負絀烘偓鎸囬拡(dangling pointer)
14.鍔ㄦ佸垎閰嶇殑瀵硅薄琚垎閰嶅湪紼嬪簭鐨勭┖闂插瓨鍌ㄥ尯(free store)鐨勫彲鐢ㄥ唴瀛樻睜涓?br />
15.new琛ㄨ揪寮忓け璐ユ椂, 閫氬父浼氭姏鍑篵ad_alloc寮傚父
16.搴旂敤delete琛ㄨ揪寮忓け璐? 浣垮唴瀛樻棤娉曡繑鍥炵┖闂插瓨鍌ㄥ尯, 縐頒綔鍐呭瓨娉勯湶(memory leak)
17.瀵圭敤涓鍐呭瓨搴旂敤浜嗕袱嬈elete琛ㄨ揪寮? 閫氬父鍙戠敓鍦ㄤ袱涓寚閽堟寚鍚戝悓涓涓姩鎬佸垎閰嶅璞$殑鏃跺? 榪欐槸涓涓緢闅捐窡韙殑闂
18.鍦ㄥ璞¤閲婃斁鍚庤鍐欒瀵硅薄, 榪欏父甯鎬細鍙戠敓, 鍥犱負delete琛ㄨ揪寮忓簲鐢ㄧ殑鎸囬拡娌℃湁琚緗負0
19.涓哄府鍔╃▼搴忓憳鏇村ソ鍦扮鐞嗗姩鎬佸垎閰嶇殑鍐呭瓨, c++搴撴彁渚涗簡auto_ptr綾葷被鍨嬬殑鏀寔 --鏅鴻兘鎸囬拡
20.auto_ptr綾繪ā鏉垮ご鏂囦歡<memory>
auto_ptr<int>pi(new int(1024));
//pi鏄眬閮ㄦ櫤鑳芥寚閽? 褰損i鐢熷懡鏈熺粨鏉熸椂鍊? 浼氳嚜鍔ㄩ噴鏀緋i鎸囧悜鐨勫爢絀洪棿
涓轟簡鍒ゆ柇auto_ptr瀵硅薄鏄惁鎸囧悜浜嗕竴涓璞? 鍙互鐢ㄦ搷浣済et()榪斿洖auto_ptr瀵硅薄鍐呴儴鐨勫簳灞傛寚閽?br />
if(p_auto_int.get() != 0 && *p_auto_int != 1024) { ... }
21.鍦ㄦ煇浜涙儏鍐典笅, 灝忕粏鑺備細縐仛鎴愬彲鎬曠殑鎬ц兘鐡墮, 榪欎簺緇嗚妭涓嶅簲璇ョ儲鎵伴偅浜涜瘯鍥句負鏁翠釜紼嬪簭鎻愪緵瑙e喅鏂規鐨勪漢, 浣嗘槸榪欎簺緇嗚妭鏄湁緇忛獙鐨勭▼搴忓憳搴旇鑰冭檻
鐨?br />
22.瀹氫綅new琛ㄨ揪寮?br />
new琛ㄨ揪寮忓彲浠ュ厑璁哥▼搴忓憳瑕佹眰灝嗗璞″垱寤哄湪宸茬粡琚垎閰嶅ソ鐨勫唴瀛樹腑, 榪欑褰㈠紡鐨刵ew琛ㄨ揪寮忚縐頒負瀹氫綅new琛ㄨ揪寮?placement new expression)
new (place_address) type -specifier
place_address蹇呴』鏄釜鎸囬拡
澶存枃浠?lt;new>
byte *mem = new byte[4096]; //榪欎釜鏄嚜瀹氫箟鍐呭瓨姹?
char *tmp = new(mem) char; //鍦ㄥ唴瀛樻睜鍒嗛厤涓涓猚har鏉ョ敤?
delete [] mem;
瀹歸噺)
4.capacity()鎿嶄綔 --姹備竴涓鍣ㄧ殑瀹歸噺
5.瀹瑰櫒鐨勯暱搴?--瀹瑰櫒褰撳墠鎷ユ湁鍏冪礌鐨勪釜鏁?br />
6.size()鎿嶄綔 --姹備竴涓鍣ㄧ殑闀垮害
7.鏁版嵁綾誨瀷瓚婂鏉? vector鐨勬晥鐜囧氨瓚婁綆
8.reserve()鎿嶄綔 --鍏佽紼嬪簭鍛樺皢瀹瑰櫒鐨勫閲忚緗垚涓涓幇瀹炴寚瀹氱殑鍊?br />
9.榪唬鍣?iterator) --鎻愪緵浜嗕竴縐嶄竴鑸寲鐨勬柟娉? 瀵歸『搴忔垨鍏寵仈瀹瑰櫒綾誨瀷涓殑姣忎釜鍏冪礌榪涜榪炵畫璁塊棶
10.姣忎釜瀹瑰櫒綾誨瀷閮芥彁渚涗簡涓涓猙egin()鍜屼竴涓猠nd()鎴愬憳鍑芥暟
11.begin()榪斿洖涓涓猧terator, 鎸囧悜瀹瑰櫒鐨勭涓涓厓绱?br />
12.end()榪斿洖涓涓猧terator, 鎸囧悜瀹瑰櫒鐨勬湯鍏冪礌鐨勪笅涓涓綅緗?br />
13.鍑轟簡iterator綾誨瀷, 姣忎釜瀹瑰櫒榪樺畾涔変簡涓涓猚onst iterator綾誨瀷, 瀵逛簬閬嶅巻const瀹瑰櫒鏄繀闇鐨?br />
14.iterator綆楁湳璁虹畻鍙傜敤浜巚ector鎴杁eque, 鑰屼笉閫傜敤涓巐ist, 鍥犱負ielist鐨勫厓绱犲湪鍐呭瓨涓笉鏄繛緇瓨鍌ㄧ殑
15.string.find_first_of()鏌ユ壘涓庤鎼滅儲瀛楃涓蹭腑浠繪剰涓涓瓧絎︾浉鍖歸厤鐨勭涓嬈″嚭鐜? 騫惰繑鍥炲畠鐨勭儲寮曚綅緗?br />
16.string.substr()鐢熸垚string瀵硅薄鐨勫瓧涓茬殑涓涓嫹璐?br />
17.string.rfind()鏌ユ壘鏈鍚庣殑鎸囧畾瀛椾覆鍑虹幇鐨勭儲寮?br />
18.string.find_first_not_of()鏌ユ壘絎竴涓笉涓庤鎼滅儲瀛楃涓茬殑浠繪剰瀛楃鐩稿尮閰嶇殑瀛楃
19.string.find_last_of()鏌ユ壘瀛楃涓蹭腑鐨?涓庢悳绱㈠瓧絎︿覆浠繪剰鍏冪礌鐩稿尮閰?鐨勬渶鍚庝竴涓瓧絎?br />
20.string.find_last_not_of()鏌ユ壘瀛楃涓蹭腑鐨?涓庢悳绱㈠瓧絎︿覆浠繪剰瀛楃鍏ㄤ笉鍖歸厤"鐨勬渶鍚庝竴涓瓧絎?br />
21.string.erase(pos, num)鎿嶄綔鍘繪帀瀛楃涓蹭腑鐨勬寚瀹氫覆, pos琛ㄧず浣嶇疆, num琛ㄧず鍘繪帀鐨勯暱搴?br />
22.<locale>ctype綾? 灝佽漿浜嗘爣鍑哻搴撳嚱鏁扮殑鍔熻兘鍙婁竴緇勯潪鎴愬憳鍑芥暟
23.string.compare(pos, num, str); 姣旇緝pos浣嶇疆鐨勫悗闈um涓瓧絎︽槸鍚︿負str
24.string.insert(pos, newstring); pos琛ㄧず瑕佹彃鍏ョ殑浣嶇疆, newstring琛ㄧず瑕佹彃鍏ョ殑瀛楃涓?br />
25.string.assign(); 瀛楃涓叉嫹璐?br />
26.string.append(); 瀛楃涓叉嫾鎺?br />
27.string.swap(); 浜ゆ崲涓や釜瀛楃涓?br />
28.string.at(); 瀵瑰瓧絎︾殑涓嬫爣绱㈠紩鎿嶄綔, 鏈夊绱㈠紩鍊艱寖鍥存嫻? 涓嬫爣瓚婄晫鏃舵姏鍑簅ut_of_range寮傚父
try {
char ch = st.at(index);
} catch(std::out_of_range) { ... }
29.string.replace(pos, num, newstring); 鐢╪ewstring浠f浛pos鍚庨潰num涓瓧絎﹀瓙涓?br />
30.map 涔熷彨鍏寵仈鏁扮粍(associative array) 閿?鍊煎 key/value
閿敤鏉ョ儲寮昺ap, 鍊肩敤浣滃瓨鍌ㄥ拰媯绱㈢殑鏁版嵁
map瀵硅薄瀹氫箟, 鑷沖皯瑕佹寚鏄庨敭鍜屽肩殑綾誨瀷, 濡?
map<string, int> word_count;
31.map鐨勬暟鎹綍鍏?br />
map<string, string> str_str;
str_str[string("one")] = string("1"); //榪欑鏁堢巼姣旇緝浣?br />
str_str.insert(
map<string, string>::value_type("two", "2")
); //榪欑鏁堢巼楂?br />
32.鏌ユ壘騫惰幏鍙杕ap涓殑鍏冪礌
鏈綆鍗曠殑鏂規硶:
value = mapObj[key];
浣嗚繖鏍鋒湁涓棶棰? 濡傛灉涓嶅瓨鍦╧ey榪欎釜閿? mapObj灝變細鎻掑叆key閿? 騫舵妸瀵瑰簲鐨剉alue鍊間負榛樿鍊? 榪欐牱寰楀埌鐨剉alue鏄棤鏁堢殑
鎵浠? 搴旇榪欐牱鍐?br />
if(mapObj.count(key))
value = mapObj[key];
鎴栬呰繖鏍?
map<keyType, valueType>::iterator iter = mapObj.find(key);
if(iter != mapObj.end())
value = mapObj[key];
33.浠巑ap涓垹闄ゅ厓绱?br />
erase鎿嶄綔
mapObj.erase(key);
榪樻湁涓ょ閲嶈澆鏂瑰紡, 璇﹁鏂囨。
mapObj.clear(); 娓呯┖map瀵硅薄鎵鏈夊?br />
34.set瀵硅薄鎻掑叆鍏冪礌
#include <set>
set<setType> setObj;
setObj.insert(key);
35.set瀵硅薄鏌ユ壘鍏冪礌
setObj.count(key); //1鏈? 0娌℃湁
setObj.find(key); iter涓簊etObj.end()琛ㄧず娌℃湁
36.multiset鍜宮ultimap鍏佽瑕佽瀛樺偍鐨勯敭鍑虹幇澶氭
瀵逛簬multiset鍜宮ultimap鐨勮凱浠g瓥鐣ユ槸鑱斿悎浣跨敤find榪斿洖鐨刬terator鍜宑ount榪斿洖鐨勫?
count = mulsetObj.count();
multiset<type>::iterator iter;
iter = mulsetObj.find(key);
for(int i = 0; i < count; ++i, ++iter)
do_something(*iter);
鍙︿竴縐嶆柟娉曟槸浣跨敤equal_range()榪斿洖鐨刬terator鍊?br />
濡傛灉榪欎釜鍊煎瓨鍦? 鍒欑涓涓猧terator鎸囧悜璇ュ肩殑絎竴涓疄渚? 涓旂浜屼釜iterator鎸囧悜榪欎釜鍊肩殑鏈鍚庝竴涓疄渚嬬殑涓嬩竴涓綅緗?
switch(mulmapObj.count) {
case 0: break; //涓嶅瓨鍦?br />
case 1: //鍙湁涓欏? 鐢ㄦ櫘閫氱殑find鎿嶄綔
multimap<keyType, valueType>::iterator iter;
iter = mulmapObj.find(key);
do_something(*iter);
break;
default: //鏈夎澶氶」
typedef multimap<keyType, valueType>::iterator it;
pair<it, it>pos;
pos = mulmapObj.equal_range(key);
for(; pos.first != pos.second; pos.first++)
do_somethine(*pos.first);
}
//瀵瑰簲鐨? 鍒犻櫎鐨勮瘽鐢╩ulmapObj.erase(pos.first, pos.second);
//涓嶆敮鎸佷笅鏍囨搷浣滄槸璁塊棶multimap鍏冪礌鐨勪竴涓檺鍒?
mulmapObj[key]; //閿欒
37.鏍堝鍣?stack container)鏀寔鐨勬搷浣?//澶存枃浠?lt;stack>
empty()
size()
pop()
top()
push(item)
38.鏍堢被鍨嬭縐頒負瀹瑰櫒閫傞厤鍣?container adapter)
39.緙虹渷鎯呭喌涓? 鏍堢敤瀹瑰櫒綾誨瀷deque瀹炵幇, 鏀瑰彉榪欎釜緙虹渷鍊煎彲浠ヨ繖鏍?
stack<type, list<type>> stackObj; //鏀規垚鐢ㄥ鍣ㄧ被鍨媗ist瀹炵幇
//涓鑸槸瀹氫箟涓涓寚閽堟爤
class CTest;
stack<CTest*> ctestStack;
40.鏍囧噯搴撴彁渚涗簡涓ょ椋庢牸鐨勯槦鍒? queue(闃熷垪), priority_queue(浼樺厛綰ч槦鍒?
澶存枃浠?<queue>
41.queue鍜宲riority_queue鎿嶄綔
empty()
size()
pos()
front() //鍙兘鐢ㄥ湪涓鑸槦鍒?br />
back() //鍙兘鐢ㄥ湪涓鑸槦鍒?br />
top() //鍙兘鐢ㄥ湪浼樺厛綰ч槦鍒?br />
push(item)