C++:模板類使用成員函數模板處理隱式(implicit)轉換

指標支援隱式轉換(implicit conversion), 在動態綁定中,衍生類別指標可以轉換為基類指標.但是模板的執行個體化(instantiations)之間, 是單獨存在的,衍生類別的執行個體化的模板(SmartPtr<Derived>), 不能轉換為基類執行個體化的模板(SmartPtr<Base>);需要明確的編寫, 因為衍生類別也可以繼續做為基類, 產生衍生類別, 所以無法直接寫出建構函式.使用成員函數模板(member function template)

C++:類的虛函數及虛繼承所佔的空間

char佔用一個位元組, 但不滿足4的倍數時, 會進行資料對齊, 使用4的倍數的位元組(byte).GCC:GCC中, 無論是虛函數還是虛繼承, 都需要將指標儲存在虛函數表(virtual function table), 佔用4個位元組.繼承會繼承基類的資料, 和虛函數表, 即繼承基類的空間.代碼:/* * test.cpp * * Created on: 2014.04.20 * Author: Spike */ /*eclipse cdt, gcc 4.8.

C#/C++/CLI運行效率測試之二 Native C++調用Native C++ DLL

本文分為兩方面一.Native C++調用Native C++ DLL 並測試回合時間二. 完全由C# 實現運算代碼 並測試回合時間詳細過程:一:至於如何擷取EfficiencyNativeCPPDLL.dll 和 EfficiencyNativeCPPDLL.lib 以及產生項目EfficiencyNativeCPPDLL本文講述在VS2010中本地C++調用C++類庫以進行效率測試1. 常見Win32控制台應用程式 ConsoleCPPInvokeDLL2.選擇下一步點擊完成就可以了3

C++:RTTI(RunTime Type Information)運行時類型資訊 詳解

RTTI, RunTime Type Information, 運行時類型資訊, 是多態的主要組成部分,通過運行時(runtime)確定使用的類型, 執行不同的函數,複用(reuse)介面.dynamic_cast<>可以 使基類指標轉換為衍生類別的指標, 通過判斷指標的類型, 可以決定使用的函數.typeid(), 可以判斷類型資訊, 判斷指標指向位置, 在多態中, 可以判斷基類還是衍生類別.代碼:/* * test.cpp * * Created on: 2014.04.

C++:Vector 計算 均值(mean) 和 方差(variance)

vector<>類型的數組, 計算均值和方差的最簡方法.代碼:double sum = std::accumulate(std::begin(resultSet), std::end(resultSet), 0.0); double mean = sum / resultSet.size(); //均值 double accum = 0.0; std::for_each (std::begin(resultSet), std::end(resultSet), [&

C++:庫函數優先順序隊列(priority_queue)輸出最小值 代碼

庫函數優先順序隊列(priority_queue)的實現方式是堆(heap), 預設是輸出最大值.輸出最小值, 需要指定參數, priority_queue<int, vector<int>, greater<int> >代碼:/* * main.cpp * * Created on: 2014.7.20 *更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/cplus/ *

C++ Builder 2010集合類的一個BUG

今天用C++ Builder 2010寫一段小代碼,用到了集合類,可集合運算結果怎麼也不對,排除了其它原因,最後確定應該是集合類原始碼的問題,下面是一段集合類的測試代碼:enum TTest{tt0, tt15 = 15, tt16 = 16}; typedef Set<TTest, tt0, tt16> TTests; void __fastcall TForm1::Button1Click(TObject *Sender) { TTests t1 =

c++中的重名問題

看C++視頻教程-範磊主講(2.91G)視頻學習筆記整理。1.c++為什麼要引入名字空間(namespace)?c++引入名字空間這個概念,是為了避免重名問題,比如說避免重複的函數名或者變數名引起的衝突。2.比如:採用名字空間這樣寫,可以有三個名字為b的變數名,但是他們的值都是不一樣的。#include<iostream>namespace a{ int b=5;}namespace c{ int b=8;}int main(){ int b=9; std::

c++學習:字元型中的特殊字元斷行符號符

1.字元型的應用之強制類型轉換:#include<iostream>using namespace std;int main(){ for(int i=32;i<128;i++) { cout<<(char)i; } cout<<endl; return

C++位操作概述

定義二進位變數:一般是以八進位或者十六進位來定義,八位元以0開頭,十六進位數以0x開頭例如int  a = 0x80, 這裡的80隻能表示8個二進位位,它表示的是int的低8位,前面的24個二進位位補0,所以a = 128;也可以 a = –0x80, 此時a = -128;8進位同理需要注意的是:如果0x…能夠在整形內表示,則其預設是int,否則再看unsigned int能否表示,接著long long ,再接著unsigned long long

c/c++如何讀入一行不確定個數的整數

假設有一個檔案,檔案的每一行包括n個整數,整數之間以一個空格隔開,檔案總共有m行,但是事先不知道n,m。如何每次從檔案中讀取一行整數放到一個數組中。可以分為兩步:1、首先從檔案中讀入一行字串,2、然後從這一行字串中解析出整數。對於第一步,我們可以有c、c++兩種風格的做法c風格:FILE *fp = fopen("input.txt", "r"); char buf[10000]; while(fgets(buf, 10000, fp))

linux不同環境下c/c++程式移植方法

這邊之前的大多數項目都用的java,而自己用的c++,等到快要上線的時候才發現線上機器的gcc和libc的版本都巨低,跟自己測試開發用的環境不相容,編譯出的c++可執行檔沒法運行。解決c++程式的移植問題費了挺大周章,如下是一個具體記錄:1、問題描述如上所述,線上機器與開發機環境不相容,需要做c++程式的移植。2、表現細節不表,總之就是程式沒法運行,找不到對應的庫。如下給出幾個跟gcc有關的錯誤提示:/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.

C++:介面繼承(interface) 和 實現繼承(implementation) 詳解

繼承介面和實現, 主要包含三種方式:1. 只繼承介面, 純虛函數;2. 繼承介面和實現, 允許覆寫(override), 虛函數;3. 繼承介面和實現, 不允許覆寫(override), 非虛函數;1. 純虛函數:只繼承介面, 但是衍生類別必須實現其介面;純虛函數也可以包含實現, 但是只能在指明類(即, class::)的時候使用2. 虛函數:繼承介面和實現, 衍生類別可以覆寫(override), 也可以使用預設版本, 即基函數(base)版本;純虛函數約束程式更多, 虛函數更靈活;3.

C++:程式已耗用時間

C++使用C語言的time庫, 即可統計程式的已耗用時間;標頭檔#include <ctime>代碼:#include<iostream> #include<ctime> void do_something() { for(int i=0;i<100000;i++) for(int j=0;j<10000;j++) ; } int main(int arg,char ** argv) {

C++:判斷檔案夾(folder)是否存在(exist)

寫入程式, 需要在檔案夾中寫入資料, 如果檔案夾不存在, 則無法寫入, 在程式入口需要判斷;由於屬於系統層, Windows的兩種解決方案.參考: http://stackoverflow.com/questions/8233842/how-to-check-if-directory-exist-using-c-and-winapi1. GetFileAttributesA()函數DWORD d = GetFileAttributesA(const char* filename);

C++:虛繼承(virtual inheritance) 詳解

在多重繼承(multiple inheritance)中, 可能出現多個基類繼承自同一個基類, 即"菱形繼承", 會導致最頂層的基類, 被複製多次;可以採用虛繼承(virtual inheritance)的方式, 使衍生類別(derived class)只保留最頂層基類的一個副本.virtual, 即需要vptr(virtual table pointer), 即虛表指標, 額外佔用4個位元組;代碼如下:/* * test.cpp * * Created on: 20

C++:顯示介面&運行期多態 和 隱式介面&編譯期多態

類(class)和物件導向:顯示介面(explicit interface): 即在原始碼中可見, 可以在標頭檔內看到類的所有介面;運行期多態(runtime polymorphism):成員函數是virtual, 傳入類的引用或指標時, 在運行時, 會自動匹配介面, 可能是基類的介面, 也可能是衍生類別的;模板(templates)和泛型程式設計(generic programming):隱式介面(implicit interface):typename T, 在函數中, 所必須支援一組操作,

C++:類的成員變數 聲明順序 與 初始化順序 相同

類成員的預設初始化順序是按照聲明順序進行, 如果使用初始化列表初始化成員變數, 則必須按照成員變數的聲明順序進行;否則, 在變數之間交替賦值時, 會產生, 未初始化的變數去賦值其他變數;同時GCC, 也會發出警告, 如: 'class::m_xxx' will be initialized after [-Wreorder]代碼:/* * BInsertSort.cpp * * Created on: 2014年4月15日 * Author: Spike */ #

蟻群演算法小程式(C/C++語言實現)(一)

演算法解釋:程式開始運行,螞蟻們開始從窩裡出動了,尋找食物;他們會順著螢幕爬滿整個畫面,直到找到食物再返回窩。其中,‘F’點表示食物,‘H’表示窩,白色塊表示障礙物,‘+’就是螞蟻了。預期的結果:各個螞蟻在沒有事先告訴他們食物在什麼地方的前提下開始尋找食物。當一隻找到食物以後,它會向環境釋放一種資訊素,吸引其他的螞蟻過來,這樣越來越多的螞蟻會找到食物!有些螞蟻並沒有象其它螞蟻一樣總重複同樣的路,他們會另闢蹊徑,如果令開闢的道

C語言實現UUID產生演算法(WIN32版本)

根據定義,UUID(Universally Unique IDentifier,也稱GUID)在時間和空間都是唯一的。為保證空間的唯一性,每個UUID使用了一個48位的值來記錄,一般是電腦的網卡地址。為保證時間上的唯一性,每個UUID具有一個60位的時間戳記(timestamp)。這個時間戳記表示自公元1582年(絕對不是1852,這是《COM技術內幕》,1999年3月第1版第89頁中的一個錯誤)10月15號00:00:00:00以來的時間,是以100納秒為單位的時間間隔。1納秒(ns)=10-

總頁數: 4314 1 .... 1149 1150 1151 1152 1153 .... 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.