亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2231 | 回復: 4
打印 上一主題 下一主題

一個通過虛表指針訪問虛函數(shù)的問題 [復制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2009-05-28 09:33 |只看該作者 |倒序瀏覽
#include <iostream>
using namespace std;
class base{
  public:
  int a;
  virtual void foo() {cout<<"base "<<a<<endl;}
};

class derived:public base{
  public:
  virtual  void foo() {cout<<"derived "<<a<<endl;}
};


typedef void(*fun)();


int main(){
  derived B;
  base A,*pa;
  B.a=2;
  A.a=1;
  
  printf("%x\n",*((int *)&A));
  printf("%x\n",*((int *)&B));



  pa=&B;
  memcpy(&A,&B,sizeof(A));

  A.foo();
   
  fun pf=NULL;
  int *vptr;
  memcpy(&vptr,&A,4);
  pf= (fun) *vptr;
  pf();  

  
  system("pause");
  return 0;
}

dev-c++ 編譯結(jié)果:

441c68
441c78
base 2
derived 4262624

我想把子類對象復制給父類對象 然后通過虛表指針的方式調(diào)用函數(shù)
對結(jié)果很疑惑
A.foo 不也是通過虛表指針訪問到函數(shù)的嗎
pf() 與 A.foo() 按理結(jié)果應該是一樣的
為什么會產(chǎn)生不同的結(jié)果呢
希望高手指點一下

論壇徽章:
0
2 [報告]
發(fā)表于 2009-05-28 12:41 |只看該作者
原帖由 pumasuede 于 2009-5-27 17:33 發(fā)表
#include
using namespace std;
class base{
  public:
  int a;
  virtual void foo() {cout


A.foo()不走虛函數(shù)表,需要指針或引用才行。

論壇徽章:
0
3 [報告]
發(fā)表于 2009-05-28 13:30 |只看該作者

回復 #2 emacsnw 的帖子

這個是C++標準規(guī)定的嗎?
以前還從來沒有注意到過這問題。

-------------------------------------------
btw: Santa Monica 什么意思?呵呵,昨天看《老友記》里面提到了 Santa,圣誕老人。 Monica是女主角之一。 這個跟《老友記》有關(guān)系嗎?

論壇徽章:
0
4 [報告]
發(fā)表于 2009-05-28 13:39 |只看該作者
原帖由 emacsnw 于 2009-5-28 12:41 發(fā)表


A.foo()不走虛函數(shù)表,需要指針或引用才行。


謝謝
還有一個問題是 derived后面的值為什么不是2而是隨機值呢

論壇徽章:
0
5 [報告]
發(fā)表于 2009-05-28 14:17 |只看該作者
原帖由 GodPig 于 2009-5-27 21:30 發(fā)表
這個是C++標準規(guī)定的嗎?
以前還從來沒有注意到過這問題。

-------------------------------------------
btw: Santa Monica 什么意思?呵呵,昨天看《老友記》里面提到了 Santa,圣誕老人。 Monica是女主 ...


C++標準里面沒規(guī)定虛函數(shù)要如何實現(xiàn),也沒有虛函數(shù)表的概念。

-------------------------------------------
是個地名。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP