ATL Style 模板學習手記

2021-03-31 08:56:32 字數 1240 閱讀 8132

atl style 模板學習手記

atl的模板定義有些讓人看的眼花繚亂,如,

class cmywnd : public cwindowimpl ;

據說,這樣做是合法的,原因是c++的語法解釋過,即使cmywnd類只是被部分定義,類名cmywnd已經被列入遞迴繼承列表,是可以使用的。

將類名作為模板類的引數是因為atl為了在編譯期間的虛函式呼叫。而真正的虛函式,其多型性是在執行時刻決定的。

為此,做程式已觀之:

// atltemplate.cpp : 定義控制台應用程式的入口點。 //

#include "stdafx.h"

using std::cout;

using std::endl;

class base

protected:

void printclassname();

class d1 :public base ;

class d2:public base

;

template

class baset

protected:

void printclassname();

class td1 :public baset

;

class td2 : public baset

{};

class td3 : public baset

;

int _tmain(int argc, _tchar* argv)

最後的輸出結果:

my class name: base

my class name: base

my class name: td1

my class name: baset

my class name: td1

對於普通的類base來說,在基類base::sayhi()中呼叫printclassname()函式,只能呼叫自己看得到的函式: base::printclassname

所以d1雖然也定義了printclassname,但是沒有被呼叫。

如果將base中的printclassname前面加上virtual,則結果又不一樣了。結果d1呼叫的是自己類的函式d1::printclassname;

而後使用的模板,由於在基類中將this指標強制轉化成子類,導致可以檢視到子類的函式了。如果不用模板,如何能在基類中強制轉化成子類呢?真是高明。

Delphi學習手記

本人一直使用c buider,並開發了乙個 商關係管理 的三層應用系統.現公司要求使用delphi,沒辦法只有重新學習pascal語言.便記錄學習的過程,那就叫delphi學習手記吧.1 好象inherit form不行,如果想覆蓋上邊的方法,重寫事件或函式,竟然報錯,不懂先,是不是inherit不...

python學習手記

1.list由小到大排序用list.sort 由大到小排序用list.sort reverse true 2.list逆序用list.reverse 3.list 0 代表list中的第乙個元素,中括號一般用於表示元素位置,表示元素 4.dict中沒有排序的說法,keys用於表示位置,應用時用 6....

github學習手記

1.安裝配置 安裝 配置 git config global user.name your name git config global user.email email example.com ssh keygen t rsa c your email youremail.com 成功的話會在 下...