MFC重寫CView的getDocument()函式沒有實現多型,只是靜態聯編
class CsniffDoc : public CDocument
{
public:
void CapturePachet();
}
class majorView : public CFormView
{
public:
CsniffDoc* GetDocument() const;
}
CDocument* currentDoc=GetActiveView()->GetDocument();
currentDoc->capturePachet();//
系統總是提示capturepachet()不是CDocument的成員函式,後來將加紅的兩條語句改成如下:
CsniffDoc* currentDoc=(CsniffDoc*)
currentDoc->CapturePachet();
這樣就可以啦。
為什麼等號後面加個強制指標型別轉換?我查看了一下CFormview及其基類CView,發現getDocument()函式並沒定義為virtual。也就是說這裡邊並沒有用到多型的知識,只是靜態聯編而已。
相關推薦
MFC重寫CView的getDocument()函式沒有實現多型,只是靜態聯編
class CsniffDoc : public CDocument { public: void CapturePachet(); } class majorView : public CFormView { public: CsniffDoc* GetDocu
C/C++—— 在建構函式中呼叫虛擬函式能實現多型嗎(Vptr指標初始化的過程分析)
問題引入: 比如:如果我們想在父類的建構函式中呼叫虛擬函式,當定義子類物件的時候,父類的建構函式中的虛擬函式執行的是子類中的函式。 在下面的例子中,定義子類物件的時候,在父類建構函式中的print虛擬函式執行的不是子類中的print函式,而是父類中的prin
malloc()函式的實現原理和工作機制!!!!!!!
malloc函式的實質體現在,它有一個將可用的記憶體塊連線為一個長長的列表的所謂空閒連結串列。呼叫malloc函式時,它沿連線表尋找一個大到足以滿足使用者請求所需要的記憶體塊。然後,將該記憶體塊一分為二(一塊的大小與使用者請求的大小相等,另一塊的大小就是剩下的位
pandas stack()函式可用於轉置,但功能絕不僅僅限於轉置。真正的轉置是df.T
實際上轉置是df.T http://pandas.pydata.org/pandas-docs/stable/reshaping.html#reshaping-and-pivot-tables Reshaping and Pivot Tables R
C語言函式指標實現多型特性
1、函式指標 函式指標是指向函式的指標變數,本質上是一個指標,類似於int*,只不過它是指向一個函式的入口地址。有了指向函式的指標變數後,就可以用該指標變數呼叫函式,就如同用指標變數引用其他型別變數一樣。 指標函式一般有兩個作用:呼叫函式和做函式的引數。 2、函式指標實現多
建立一個數組, 實現函式init()初始化陣列, 實現empty()清空陣列、,實現reverse()函式完成陣列元素的逆置。自己設計函式的引數,返回值。
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> void init(int arr[], int len) { for (int i = 0; i < len; ++i)
為什麼要使用虛擬函式和 指標(或是引用)才能實現多型?
補充:(2016.04.05) 上次使用了g++ -fdump-tree-original test3.cpp命令看到了編譯器補充後的函式是什麼樣子的,但是沒有記錄,今天補充下: 下文中第一main函式的程式碼使用如上命名編譯後生成一個名為:test3.cpp.003
C++覆蓋(虛擬函式的實現原理)
Class Shape { public: virtual void cal_area() { } private: int m_ir; }; Class Circle:public Shape { public: vi
用WaitForSingleObject()函式實現簡單的多執行緒互斥訪問
今天是上班第一天,寫了一個簡單的執行緒互斥訪問練習了一下多執行緒。雖然以前寫過,但現在寫還是碰到蠻多問題,比如WaitForSingleObject()函式加在哪個位置(可以用WaitForSingleObject()等待前一個執行緒結束後然後開啟下一個執行緒以此達到同步的
求最接近cap的2次冪(tableSizeFor函式的實現)
不比cap小的2次冪(HashMap中的tableSizeFor函式)// 初始化臨界值的具體實現 static final int tableSizeFor(int cap) { int n = cap - 1; n |= n >>>
模式對話方塊和非模式對話方塊、accept()函式、exec()函式,Accepted訊號區別
一.非模式對話方塊 非模式對話方塊是和同一個程式中其它視窗操作無關的對話方塊。在字處理軟體中查詢和替換對話方塊通常是非模式的來允許同時與應用程式主視窗和對話方塊進行互動。呼叫show()來顯示非模式對話方塊。show()立即返回,這樣呼叫程式碼中的控制流將會繼續。 非模式
Python:range()函式
range() 函式 range(stop) 用來生成0~stop區間內的整數,直到stop為 止(不包含stop) range(start, stop[,step]) 用來生成start~stop區 間內的整數,直到stop為止(不包含s
np.nonzero()函式用法
返回陣列中不為0的元素的下標。 陣列中元素可為布林、整型和浮點型,返回值為元祖 一.一維陣列 1.陣列元素為布林型別 a=np.array([True,False,True,False]) b=np.nonzero(a) print(b) 輸出結果為(array([0, 2], dtype
python中的encode()和decode()函式
前言: 我們知道,計算機是以二進位制為單位的,也就是說計算機只識別0和1,也就是我們平時在電腦上看到的文字,只有先變成0和1,計算機才會識別它的意思。這種資料和二進位制的轉換規則就是編碼。計算機的發展中,有ASCII碼,GBK,Unicode,utf-8編碼。我們先從編碼的發展史瞭解一下編碼的進化過程。
python中的open()函式
定義: python open() 函式用於開啟一個檔案,建立一個 file 物件,相關的方法才可以呼叫它進行讀寫 引數: 模式 描述 r 以只讀方式開啟檔案。檔案的指標將會放在檔案的開頭。這是預設模式。 rb 以
numpy的cumsum ()函式
cumsum是matlab中一個函式,通常用於計算一個陣列各行的累加值,函式用法是B = cumsum(A,dim),或B = cumsum(A)。 函式功能 呼叫格式及說明 格式一:B = cumsum(A) 這種用法返回陣列不同維數的累加和。
eval()函式的理解
import tensorflow as tf import numpy as np with tf.variable_scope("test1",initializer=tf.constant_initializer(0.4)): var1=tf.get_variabl
詳解JavaScript中的replace()函式
Javascript中字串物件有一個方法replace(),它的作用非常強大。這裡把它的用法整理一下。 一、方法簡介 該方法的簽名是:replace([RegExp|String],[String|Function])。 該方法 返回一個新的字串,但並不改變字串本身。
ucosII移植學習過程,OS_CPU_SR_Save()和OS_CPU_SR_Restore()函式的解析
今天突然興起回顧了一下ucosII,本人在這方面也是小白,但研究了一下,也算有點收穫,在此記錄一下。 我們都知道,程式碼的臨界段,也叫臨界區,指的是處理時不可以分割的程式碼。一旦這部分程式碼開始執行,則不容許任何中斷打斷。為了確保臨界段程式碼的可靠執行,在進入臨界段之前一定要關閉中斷,而臨界段執
sprintf()函式的用法
sprintf函式的格式:int sprintf( char *buffer, const char *format [, argument,...] ); 除了前兩個引數固定外,可選引數可以是任意個。buffer是字元陣列名;format是格式化字串 常用方式 sprintf函式的功能與print