4 9兩層結構時虛基類表內容分析

2021-10-24 07:16:21 字數 1954 閱讀 2592

#include

using

namespace std;

class

grand

//爺爺類

;classa1:

virtual

public grand

;classa2:

virtual

public grand

;classc1:

public a1,

public a2

;int

main()

a1物件的結構:

1-8位元組虛基類表指標,m_a1,補齊,m_grand,補齊

可以看到,虛基類表位址0x00007ff72a019bd8

5-8位元組表示偏移16位元組,「虛基類表指標」成員變數的首位址 + 這個偏移量 就等於 虛基類物件首位址(這裡是m_grand首位址)。跳過這個偏移值,我們就能夠訪問到虛基類物件。

1-4位元組:虛基類表指標成員變數的首位址 ,和本物件a1首位址之間的偏移量 也就是:虛基類表指標 的首位址 - a1物件的首位址,這裡正好為0。

#include

using

namespace std;

class

grand

//爺爺類

;class

grand2

//爺爺類

;classa1:

virtual

public grand,

public grand2//實繼承grand2

;classa2:

virtual

public grand

;classc1:

public a1,

public a2

;int

main()

a1物件32位元組

實繼承來的m_grand2在最前面,補齊,虛基類指標,m_a1,補齊,m_grand(虛基類繼承來的最後),補齊

可以看到虛基類表位址0x00007ff7144c9bd8

5-8位元組表示偏移16位元組,「虛基類表指標」成員變數的首位址 + 這個偏移量 就等於 虛基類物件首位址(這裡是m_grand首位址)。跳過這個偏移值,我們就能夠訪問到虛基類物件。

1-4位元組:虛基類表指標成員變數的首位址 ,和本物件a1首位址之間的偏移量 也就是:虛基類表指標 的首位址 - a1物件的首位址,這裡是-8(fffffff8)。

#include

using

namespace std;

class

grand

//爺爺類

;class

grand2

//爺爺類

;classa1:

virtual

public grand,

virtual

public grand2

;classa2:

virtual

public grand

;classc1:

public a1,

public a2

;int

main()

虛基類指標,m_a1,補齊,m_grand,m_grand2(虛基類繼承來的都在最後面,虛基類指標在最前面)

可以看到虛基類表位址0x00007ff697cd9d78

現在多了4位元組

前4位元組:虛基類表指標成員變數的首位址 ,和本物件a1首位址之間的偏移量 也就是:虛基類表指標 的首位址 - a1物件的首位址,這裡是0

5-8位元組表示偏移16位元組,「虛基類表指標」成員變數的首位址 + 這個偏移量 就等於 虛基類物件首位址(這裡是m_grand首位址)。跳過這個偏移值,我們就能夠訪問到虛基類grand物件。

9-12:偏移20位元組,跳過20位元組能訪問到虛基類grand2物件(m_grand2首位址)

生命,有兩層含義

一 你不會有那美麗的相逢,除非之前,你能忍受等待的孤獨。你不會有明朗的清晨,除非之前,你的睡夢能忍受黑夜的迷霧。你也不會贏得任何東西,除非你敢於下賭注。賭注,生命的賭注,就是你的腳步。但是,你不會找到路,除非你敢於迷路。因為,只有讓你迷路的地方,才是你真正的出路。二 有多少次此刻的離別,就有多少次彼...

兩層卷積網路分類

import tensorflow as tf from tensorflow.examples.tutorials.mnist import input data 讀取資料 mnist input data.read data sets mnist data one hot true x為訓練影象...

PyTorch搭建兩層網路

舉乙個很簡單的例子來熟悉使用pytorch構建和訓練神經網路的整個過程。import torch import torch.nn as nn n,d in,h,d out 64,1000 100,10 隨機建立一些訓練資料 x torch.randn n,d in y torch.randn n,d...