C++:30 ---C++類成員,成員函數的內存布局

前面兩篇文章我相信大家反復讀了之后對這節不陌生了:

首先來看代碼:

class Demo
{
public://靜態成員變量static const int sx = 0;//靜態函數static void SF1()
{}
public://成員變量int x;
public://成員函數void F1()
{cout << "I'm from Demo::F1()" << endl;}void F2()
{cout << "I'm from Demo::F1()" << endl;}virtual void F3()
{cout << "virtual F3()" << endl;}
public://構造函數,C++語法不允許獲取構造函數和析構函數地址,要分析其地址,只能查看生產的匯編代碼了。Demo(){}//析構函數~Demo(){}
}; 
typedef void (Demo::*Func)(); 
typedef void(*func)();
union
{Func f;void *addr;
}ut;int main(int argc, char** argv)
{int i = 0;cout << "main()函數的地址是       :" << std::hex << std::showbase << main << endl;ut.f = &Demo::F1;cout << "成員函數F1()的地址是     :"

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/444416.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/444416.shtml
英文地址,請注明出處:http://en.pswp.cn/news/444416.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

leetcode119. 楊輝三角 II 你能比我代碼更短嗎?

給定一個非負索引 k&#xff0c;其中 k ≤ 33&#xff0c;返回楊輝三角的第 k 行。 示例: 輸入: 3 輸出: [1,3,3,1]按照定義寫即可。 class Solution:def getRow(self, rowIndex: int) -> List[int]:l[1]for i in range(rowIndex):l[1][l[j]l[j1] for j in range(len(l)-1…

C++:28 --- C++內存布局(上)

了解你所使用的編程語言究竟是如何實現的,對于C++程序員可能特別有意義。 首先,我們順次考察C兼容的結構(struct)的布局,單繼承,多重繼承,以及虛繼承;接著,我們講成員變量和成員函數的訪問,當然,這里面包含虛函數的情況;再接下來,我們考察構造函數,析構函數,以…

leetcode114. 二叉樹展開為鏈表

給定一個二叉樹&#xff0c;原地將它展開為鏈表。 例如&#xff0c;給定二叉樹 1 / \ 2 5 / \ \ 3 4 6 將其展開為&#xff1a; 1 \ 2 \ 3 \ 4 \ 5 \ 6 思路&#xff1a;所有左子樹的最右節點接上右子…

C++:26---動態內存管理new、delete

實在不好意思,到這里才給大家分享new和delete。 對于非內部數據類型的對象而言,光用malloc/free無法滿足動態對象的要求。對象在創建的同時要自動執行構造函數,對象在消亡之前要自動執行析構函數。 由于malloc/free是庫函數而不是運算符,不在編譯器控制權限…

使用Log4j為項目配置日志輸出應用詳細總結及示例演示.

Log4j組件構成 Log4j由三個重要的組件構成&#xff1a; 1.日志信息的優先級(Logger) 2.日志信息的輸出目的地(Appender) 3.日志信息的輸出格式(Layout)。 概要: 日志信息的優先級從高到低有ERROR、WARN、INFO、DEBUG&#xff0c;分別用來指定這條日志信息的重要程度&…

C++:27---new delete malloc free

上一節我講了new和delete,有人問這不是和C語言的malloc/free為C的標準庫函數差不多么 void* malloc(size_t size)//參數代表字節個數 void free(void* pointer)//參數代表內存地址new、delete則為C++的操作運算符,它調用的分別為賦值運算符重載operator new()和operator del…

C++:33---類成員指針

成員指針概述: 當初始化一個這樣的指針時,我們令其指向類的某個成員,但是不指定該成員所屬的對象直到使用成員指針時,才提供成員所屬的對象成員指針是指可以指向類的非靜態成員的指針一般情況下,指針指向一個對象,但是成員指針指向的是類的成員,而不是類的所創建出的對象…

C++:31---對象引用和賦值

一、對象移動概述 C++11標準引入了“對象移動”的概念對象移動的特性是:可以移動而非拷貝對象在C++舊標準中,沒有直接的方法移動對象。因此會有很多不必要的資源拷貝標準庫容器、string、share_ptr類既支持移動也支持拷貝。IO類和unique_ptr類可以移動但不能拷貝對象移動的特…

C++:34---union:聯合/共用體,一種節省空間的類

一、聯合(union)概述 聯合(union)是一種特殊的類一個union可以有多個數據成員,但是在任意時刻只有一個數據成員可以有值。當我們給union的某個成員賦值之后,該union的其它成員就變成未定義的狀態了。分配給一個union對象的存儲空間至少要能容納它的最大的數據成員類的某些…

leetcode205. 同構字符串 一般人一次做不對的簡單題

給定兩個字符串 s 和 t&#xff0c;判斷它們是否是同構的。 如果 s 中的字符可以被替換得到 t &#xff0c;那么這兩個字符串是同構的。 所有出現的字符都必須用另一個字符替換&#xff0c;同時保留字符的順序。兩個字符不能映射到同一個字符上&#xff0c;但字符可以映射自己…

C++:32---IO庫

一、IO庫 I0庫類型和頭文件頭文件類型iostreamistream,wistream從流讀取數據ostream,wostream向流寫入數據iostream,wiostream讀寫流fstreamifstream,wifstream從文件讀取數據ofstream,wofstream向文件寫入數據fstream,wfstream讀寫文件sstreamistringstream,wistringst

leetcode209. 長度最小的子數組 借這個題規范一下雙指針寫法

給定一個含有 n 個正整數的數組和一個正整數 s &#xff0c;找出該數組中滿足其和 ≥ s 的長度最小的連續子數組。如果不存在符合條件的連續子數組&#xff0c;返回 0。 示例: 輸入: s 7, nums [2,3,1,2,4,3] 輸出: 2 解釋: 子數組 [4,3] 是該條件下的長度最小的連續子數組…

C++(STL):01---pair容器

一、pair歷史概述 C++標準庫的第1版(C++98),提供了一個簡單的class,用來處理類型不同的兩個(一對)值,這個就是pair。到了C++11,pair被重新定義,有了很大擴展pair與tuple:tuple在TR1被引入,它是對pair的擴展tuple在后面詳細概述。二、pair概述 特點: 一個pair保存兩…

C++(STL):02---tuple容器

一、tuple的歷史概述 Tuple是TR1引入的東西,它擴展了pair的概念,擁有任意數量的元素。在C++11標準之前,tuple最多帶有10個類型不同的元素C++11,tuple被重新定義,采用variadic template概念,被設計為可用于任意大小的異質集合二、tuple概述 tuple與pair類似,也是一個模板…

C++(STL):06---數值的極值(numeric_limits類)

一、數值的極值概述 數值類型有著與平臺相依的極值C++標準規定了各種類型必須保證的最小精度。這些最小值如下圖所示: 類型最小長度char1byte(8bits)shortint2bytesint2byteslongint4bytes

leetocde 225. 用隊列實現棧

使用隊列實現棧的下列操作&#xff1a; push(x) -- 元素 x 入棧 pop() -- 移除棧頂元素 top() -- 獲取棧頂元素 empty() -- 返回棧是否為空 注意: 你只能使用隊列的基本操作-- 也就是 push to back, peek/pop from front, size, 和 is empty 這些操作是合法的。 你所使用的語…

C++(STL):03---智能指針之shared_ptr

一、shared_ptr類 頭文件:#include<memory>智能指針,是一個模板。創建智能指針時,必須提供指針所指的類型如果當做前提條件判斷,則是檢測其是否為空shared_ptr<string> p1; //指向string shared_ptr<list<int>> p2;//指向int的list if(p1 &&…

C++(STL):05---智能指針之unique_ptr

一、unique_ptr類 頭文件:#include<memory>智能指針,是一個模板。創建智能指針時,必須提供指針所指的類型與shared_ptr的不同之處: shared_ptr所指向的對象可以有多個其他shared_ptr智能指針而unique_ptr所指向的對象只能有一個unique_ptr指針,也就是自己。當unique…

JAVA中int、String的類型轉換

int -> String int i12345; String s""; 第一種方法&#xff1a;si""; 第二種方法&#xff1a;sString.valueOf(i); 這兩種方法有什么區別呢&#xff1f;作用是不是一樣的呢&#xff1f;是不是在任何下都能互換呢&#xff1f; String -> int s"…

leetcode 231. 2的冪

給定一個整數&#xff0c;編寫一個函數來判斷它是否是 2 的冪次方。 示例 1: 輸入: 1 輸出: true 解釋: 20 1 示例 2: 輸入: 16 輸出: true 解釋: 24 16 示例 3: 輸入: 218 輸出: false 本題思路轉載位運算的常用技巧&#xff1a;lowbit運算&#xff0c;包含lowbit公式、…