C++:預設複製建構函式 執行 淺拷貝

C++, 會預設產生一個複製建構函式, 當類中出現指標時, 複製會執行淺拷貝, 即只複製指標的地址, 不會複製資料;所以在類中, 使用指標時, 需要注意; 如果想使用深拷貝, 可以添加複製建構函式.以下代碼, 如果不添加複製建構函式, 則會運行出錯, 但可以通過編譯,運行時, 因為刪除(delete[])兩次str所指的同一片地址空間, 所以程式無法執行.代碼:/* * main.cpp * * Created on: 2014.4.15 * Author: Spike *

C++:scoped_array詳解

The scoped_array class template stores a pointer to a dynamically allocated array.scoped_array類模板儲存了一個指向動態分配數組的指標, 可以自動析構堆(heap)上所使用的記憶體.標頭檔: #include <boost/scoped_array.hpp>代碼:/* * test.cpp * * Created on: 2014.04.18 * Author:

C++中使用編譯器常量代替預先處理常量詳解

對於預先處理的單純常量, 可以使用const類型進行代替;在物件導向編程中, 類內的常量, 可以使用靜態const成員代替,注意類內(in-class), 靜態const成員只允許使用整型常量進行賦值, 如果是其他類型, 是在類內聲明, 類外定義的方式;也可以使用"enum hack", 提供const的作用, 並且給內建(built-in)數組聲明;預先處理的函數調用存在很多問題, 可以使用模板內聯(template inline)代替,

C++中指標的引用詳解

指標(*)和引用(&),解引用(*)和取地址(&), 主要觀察是在左面, 還是在右面, 如果在左面是前者, 在右面是後者;如果比較多, 則要認真觀察, 譬如int*&, 就是指標的引用, 可以避免指標內部元素的複製;還有其他的一些形式, 見下面的例子;代碼:/* * test.cpp * * Created on: 2013.11.12 * Author: Caroline */ /*eclipse cdt; gcc 4.7.1*/

C++中函數模板(function template) 的 推進(forward) 問題

函數模板在調用函數的時候, 由於實參(argument)轉換形參(parameter)的時候, 會發生改變, 導致無法保留原實參的資訊, 即推進(forward)問題;主要包括: 引用和右值;引用, 即因為模板參數非引用, 導致複製操作, 無法提供參考型別;右值, 即因為模板參數只能轉換為左值, 無法提供右值;解決方案:引用: 使用右值參數(T&& t), 可以保證傳遞引用不發生改變;右值:使用右值參數,

C++中非類型模板參數(nontype template parameters) 的使用

非類型模板參數(nontype template parameters), 可以使用整數型別(integral type),指標(pointer) 或者是 引用(reference);綁定非類型整數形參(nontype integral parameter) 的 實參(argument) 必須是常量運算式(constant expression, constexpr);不能把普通的局部對象或者動態對象 綁定 指標或引用的非類型形參, 可以使用全域類型進行綁定;關於類模板(class

C++中Regex(regex) 替換(replace) 詳解

Regex, 可以替換(replace)匹配的字串, 使用regex_replace()函數, 需要指定替換的格式;也可以提供參數, 進行特定的輸出, 替換格式的命名空間: "boost::regex_constants::"編程環境: gcc 4.8.1 + eclipse cdt + c++11 + boost代碼:#include <iostream> #include <string> #include

C++中多重繼承(multiple inheritance) 的名稱歧義(name ambiguity)

在多重繼承中, 如果多個基類包含相同名字的成員函數, 則在衍生類別使用時, 容易發生歧義, 會導致出錯;解決方案是: 在衍生類別中重寫基類方法, 覆蓋原方法, 再指定基類範圍(scope), 確定使用那個基類的方法, 可以避免歧義;代碼如下:/* * cppprimer.cpp * * Created on: 2014.1.10 * Author: Spike */ /*eclipse cdt, gcc 4.8.1*/ #include

C++中的虛繼承(virtual inheritance)

虛繼承主要是避免基類重複被繼承, 包含多個相同基類, 導致歧義性, 使用虛基類(virtual base class)繼承, 可以使派生對象只包含一份基類檔案.如果不使用虛繼承, 則衍生類別需要提供一份自己的樣本版本,參見: http://blog.csdn.net/caroline_wendy/article/details/18077235代碼:/* * cppprimer.cpp * * Created on: 2014.1.10 * Author: Spike */

C++常見面試題

題目: 關於C++中, 四種類型轉換的關鍵字, 的詳解, 也可以給出代碼, 判斷輸出 或 判斷哪些代碼有誤.答案及範例如下:四種關鍵字: const_cast, 常量性轉除;dynamic_cast, 向下安全轉型; reinterpret_cast, 重新解釋轉型; static_cast, 靜態轉型;1.  const_cast, 常量性轉除:主要對變數的常量性(const)進行操作, 移除變數的常量性, 即可以被非常量指向和引用, 詳見代碼;2. dynamic_cast,

C++:隨機數 常態分佈(norm distribution) 詳解

常態分佈(norm distribution), 做為一種重要的分布規律, 有廣泛的用途;注意常態分佈包含兩個參數, 均值(mean) 和標準差(standard deviation);隨機庫(#include <random>), 包含常態分佈對象, norm_distribution<>, 可以用於產生常態分佈;代碼如下:#include <iostream> #include <vector> #include

C++中刪除文本的最後一行

讀取文本的每行("\n"), 儲存入數組vector<string>, 輸出時, 少輸出最後一行, 即可.代碼:/* * main.cpp * * Created on: 2014.06.08 * Author: Spike */ /*vs 2012*/ #include <windows.h> #include <fstream> #include <iostream>

C++:複製容器(container)的元素至另一個容器

C++複製容器(container)元素, 可以使用標準庫(STL)的copy()和copy_n()函數.函數樣式: OutputIterator copy (InputIterator first, InputIterator last, OutputIterator result)代碼:/* * main.cpp * * Created on: 2014年6月17日 * Author: Spike */ #include <iostream>

Windows編程:開啟/關閉/遍曆程式的類 代碼(C++)

類包含4個函數, 啟動程式, 遍曆所有進程, 關閉程式, 遍曆進程依賴的動態連結程式庫.樣本: Image.exe是預先產生的可執行程式(exe), 啟動程式, 間隔5秒, 關閉程式.使用方法參加測試程式.代碼:/* * process.h * * Created on: 2014.06.08 * Author: Spike */ /*vs 2012*/ #ifndef TRAVERSEPROCESSMODEL_H #define

Windows編程:遍曆程式使用的動態連結程式庫(dll) 代碼(C++)

遍曆程式使用的動態連結程式庫(dll), 首先需要遍曆所有進程, 匹配進程名稱與進程ID, 然後根據進程名稱, 輸出所有使用的庫(dll).樣本中Image.exe是預先啟動的程式. 程式碼封裝含遍曆進程的代碼, 和輸出動態連結程式庫(dll)的代碼.代碼:/* * main.cpp * * Created on: 2014.06.08 * Author: Spike */ /*vs 2012*/ #include <iostream> #

C++:多重繼承(multiple inheritance)歧義(ambiguous)

多重繼承, 如果基類(base class)的成員函數名稱相同,重載(overload)函數調用, 會忽略public和private, 選取最佳的匹配函數,匹配度相同, 則會造成歧義, 產出錯誤:request for member 'xxx' is ambiguous, (GCC)如需使用, 可以添加具體的網域作業符, 指定類("class::method()").代碼如下:/* * test.cpp * * Created on: 2014.04.14 *

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

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

C++:使用複合(composition) 代替 private繼承

複合方式(composition)和 private繼承, 都能表示, 根據某個類實現出新的類的形式, 即通過使用protected成員, 和重寫virtual函數.優先選擇複合方式. 原因:1. 複合方式, 可以實現重寫virtual函數, 然後阻止衍生類別重新定義virtual函數;2. 可以使Widget的編譯依存度降至最低, 即只包含類的聲明式(複合), 而避免包含基類的標頭檔(繼承);例外: private繼承, 可以使EBO(空白基類最佳化), 在某些空白基類的情況下很重要,

C++:空白基類最佳化(empty base optimization, EBO) 詳解

EBO, empty base optimization, 即空白基類最佳化, 可以使衍生類別節省空間的;但是如果使用複合(composition)的方式, 因為定義了新對象, 所以編譯器會進行填充(padding), 填充進一個int, 4位的空間;代碼:/************************************************* File: test.cpp Copyright: C.L.Wang Author: C.L.Wang Date: 2014-04-11

C++:阻止衍生類別(derived class)重新定義虛函數(final&sealed)

阻止衍生類別重新定義虛函數, 在java和C#中可以很簡單的實現(finale&sealed),但在C++中則需要使用public繼承+複合(composition)的方法;注意: 使用私人繼承(private), 無法實現此要求.如:/************************************************* File: test.cpp Copyright: C.L.Wang Author: C.L.Wang Date: 2014-04-11

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