C++:衍生類別訪問模板化基類(templatized base class)的命名

衍生類別繼承模板化基類的成員函數, 預設是無法訪問, 模板化基類的命名.原因是模板的定製化有可能取消某些函數, 為了能在編譯期檢測出錯誤, 所以預設無法訪問.衍生類別訪問模板化基類, 包含三種方法:1. 調用基類函數時, 使用"this->", 指明調用的類, 是本類, 在編譯時間, 可以進行檢查;2. 使用using聲明式, 可以把基類的函數引入衍生類別, 在編譯時間, 可以進行檢查;3. 使用顯示修飾(explicit qualification), 不推薦,

C++:將參數無關的代碼抽離模板(templates)

模板(template)可以節省時間, 和避免代碼重複, 但是有可能導致代碼膨脹;在設計範本時, 需要進行共性和變性分析(commonality and variability analysis), 把變性寫入模板, 把共性抽出來, 寫入其他模板,然後通過調用的形式,避免代碼膨脹, 即是抽出模板參數無關的代碼.可以設計一個基類, 使用私人(private)繼承的形式, 做為衍生類別的實現, 使用內聯(inline)的形式調用基類的函數.基類使用函數參數或者私人成員變數的形式, 替換模板中的參數,

C++:衍生類別強制轉換為基類

在多態的使用時, 衍生類別的指標或引用可以轉換為基類的指標或引用, 即基類的指標可以指向衍生類別的基類部分;Base* b = Derived* d;b和d指向的內容是相等的, b == d, 因為之間有一個隱式轉換即 b == (Base*)d;b和d的地址是不同的 int(b) != int(d), 因為b指向d的基類部分, d指向的是完整的衍生類別;但如果進行隱藏轉換, int(b) != int((Base*)d), 則地址相同.代碼如下:/* * test.cpp * *

C++:模板函數需要類型轉換時使用友元(friend)模板函數

模板函數的隱式(implicit)類型轉換, 涉及到模板參數(typename)的確定問題.從int或double類型, 無法隱式轉換為模板類(template class)的類型, 因為無法確定模板參數類型(typename), 就無法確定建構函式的參數.所以需要使模板函數, 與模板類擁有相同的參數類型(typename), 則需要成為模板類的友元(friend).模板類的友元, 會隨著類的參數執行個體化, 而執行個體化參數類型, 從一個函數模板, 產生定製的函數,

計算sizeof的值的32位C++程式

sizeof(str) = 6; //字串數組,大小是六個位元組(加上'\0'共六個)。sizeof(p) = 4; // 指標的內容就是一個指向目標地址的整數,所以不管指向char、int還是其他,32位機指標一律是4個位元組。更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/cplus/sizeof(n) = 4; // int型變數是4個位元組。右側:sizeof(str) = 4; // 這裡的str不再是10

C++中資料對齊問題:struct、union、enum。再談sizeof()

首先是struct,在C++中,結構體其實和class有很大的相似了。但是有一點不同的是,struct預設是public,而class中是private.當然,struct繼承等用法也是可以的。共用體的聲明方式是:枚舉的聲明方式與共用體比較相似其中a初始化為0,後面預設增1,若已經初始化,則後面再增1,比如d=6在這裡。struct長度計算大家猜一下,s1 x;int

C++的靜態繫結和動態綁定概述

C++在物件導向編程中,存在著靜態繫結和動態綁定的定義,本節即是主要講述這兩點區分。我是在一個類的繼承體系中分析的,因此下面所說的對象一般就是指一個類的執行個體。首先我們需要明確幾個名詞定義:靜態類型:對象在聲明時採用的類型,在編譯期既已確定;動態類型:通常是指一個指標或引用目前所指對象的類型,是在運行期決定的;靜態繫結:綁定的是靜態類型,所對應的函數或屬性依賴於對象的靜態類型,發生在編譯期;動態綁定:綁定的是動態類型,所對應的函數或屬性依賴於對象的動態類型,發生在運行期;從上面的定義也可以看出

C++的資料與類型

一、前言最近在看C++Primer第5版,先前已經看過第4版,但是發現第5版在整個知識布局與個別知識的講解上跟第4版差別還是挺大的,尤其是新增了C++11的內容,正如孟岩老師在第5版前言中所講:“現在能夠以新的C++11風格開發實踐的人是鳳毛麟角,如果能夠純熟的運用C++11的新特徵、新機制,那麼就能夠形成一種簡潔優雅的C++編程風絡,開發會變得更高效,更高質”。所以正好藉助第5版來重新學習鞏固C++的知識。《C++的那些事》這個系列,將會以知識片段的形式記錄我在學習過程

C++中虛函數(virtual function) 的 使用範圍

虛函數(virtual function) 在 基函數(base function) 和 派生函數(derived function) 之間可以覆寫(override);如果派生函數有與虛函數同名的函數, 則會隱藏虛函數, 但是虛函數還會在;由於派生對象和基底物件可以轉換, 可以只使用基底物件部分; 派生對象的虛函數會覆寫基底物件的虛函數;代碼:/* * cppprimer.cpp * * Created on: 2013.11.13 * Author: Caroline

C++中如何在容器中使用繼承和虛函數

容器不支援混合類型, 如果直接把衍生類別對象, 存入基類容器中, 則無法使用派生-基轉換(derived-base conversion);因為轉換隻能發生在指標和引用 過程中, 不能發生在 對象直接賦值, 如果是直接轉換, 則會產生截斷(sliced down);即衍生類別部分被切除, 只留下基類部分; 所以存入容器中的衍生類別 輸出為基類部分 的虛函數;如果想在容器中, 進行繼承, 則需要使用指標, 包括智能指標(如:shared_ptr<>),

C++中多層繼承(inheritance) 的使用及樣本

動態綁定只能應用在虛函數(virtual function), 通過指標(->)或引用(.)調用; 聲明基類指標, 綁定衍生類別對象;可以使用"shared_ptr<Abstract_Base_Class> p(new Derived_Class(para));"的形式, 動態綁定派生的類;可以為動態基類添加一個介面(interface), 使用友元函數, 訪問基類的私人成員變數; 並把具體操作寫入介面中;如果一個衍生類別, 沒有實現抽象基類的純虛函數,

C++中類模板(class template)友元(friend) 的全部六種形式

類模板(class template)的友元(friend)和普通類的友元, 有很多區別,主要原因是類模板包含模板參數(template parameter), 就會導致友元和類模板有很多匹配形式;主要包含六種形式:1. 類 - 友元(friend): "模板參數是當前類"的類模板;2. 類 - 友元: "模板參數任意"的模板類;3. 模板類 - 友元: "模板參數相同"的模板類;4. 模板類 - 友元:

C++中如何深度搜尋遍曆檔案夾

深度優先搜尋遍曆檔案夾所有檔案, 由於使用windows的函數, 必須要使用C語言;注意字元集的問題,使用"#undef UNICODE", 屏蔽因字元集所產生的問題;使用vector<string>儲存所有檔案名稱, 因為要遞迴使用, 所以需要設定為靜態,返回shared_ptr的指標代碼如下:/************************************************* File: main.cpp Copyright:

C++中格式化輸入輸出(formatted input and output) 詳解

格式化輸入輸出, 是在<iostream>的標頭檔中, 控制格式;如果修改輸入輸出的格式, 會影響之後的格式, 需要重設, 一般在格式類型之前添加"no", 即可;支援, 8進位, 16進位, 預設10進位, 以及大寫(uppercase)模式;代碼:/* * cppprimer.cpp * * Created on: 2013.11.28 * Author: Caroline */ /*eclipse cdt, gcc 4.8.1

C++:隨機數產生器(random-number generator) 詳解

隨機數, C語言的函數是rand(), C++則是隨機數產生器(random-number generator) = 分布對象(distribution object) + 引擎(engine);使函數每次產生不同的隨機數, 需要使用靜態(static)局部變數, 這樣分布對象和引擎就能保持(hold)狀態(state), 每次都產生一個新的;產生隨機的整數, 使用分布對象uniform_int_distribution<>, 預設範本參數是int;產生隨機的浮點數,

C++: 把文字檔(txt)的所有內容讀入字串(string), 最高效的方法

代碼:/* * main.cpp * * Created on: 2014年6月17日 * Author: Spike */ /*eclipse cdt, gcc 4.8.1*/ #include <iostream> #include <fstream> #include <string> #include <cerrno> std::string get_file_contents(

Windows編程:終止可執行(exe)程式 代碼(C++)

終止可執行(exe)程式, 首先遍曆進程, 找到進程名稱對於的進程ID號, 然後根據進程ID, 終止進程.範例程式碼: 包括遍曆進程代碼, 和關閉代碼.代碼:/* * main.cpp * * Created on: 2014.06.08 * Author: Spike */ /*vs 2012*/ #include <iostream> #include <string> #include <map>

C++:預設產生的成員函數

C++預設產生4個成員函數.預設建構函式(default constructor), 解構函式(destructor), 複製建構函式(copy constructor), 賦值函數(assignment);其中解構函式, 會自動析構C++的基本類型資料."=default"表示添加預設, 可以用於重載; "=delete"表示刪除, 即不使用預設;以下代碼主要展示, 複製建構函式 和賦值函數的產生情況.代碼:/* * test.cpp * *

C++:錯誤“error: 'off64_t' does not name a type”

MinGW的bug,使用-std=c++11, 有可能出現, 修改{MinGW dir}/include/io.h檔案,使用:__CRT_INLINE _off64_t lseek64 (int, _off64_t, int); __CRT_INLINE _off64_t lseek64 (int fd, _off64_t offset, int whence) {代替:__CRT_INLINE off64_t lseek64 (int, off64_t, int);

C++:explicit在建構函式的使用及詳解

explicit的主要用法就是放在單參數的建構函式中,防止隱式轉換, 導致函數的入口參數, 出現歧義.如果可以使用A構造B, 未加explicit的建構函式, 當使用B進行參數處理時, 就可以使用A, 使得介面混亂.為了避免這種情況, 使用explicit避免隱式構造, 只能通過顯示(explicit)構造.下面是代碼, 仔細閱讀必有收穫, 可以試著刪除explicit, 調用注釋的語句./*************************************************

總頁數: 4314 1 .... 2829 2830 2831 2832 2833 .... 4314 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.