Professional C++讀書筆記05

2012-05-20

Chapter09

1、復制構造函數淺復制時的隱患

???????? 若對象中有指針成員,則當對象作為形參傳入時

???????? 例如void myFun(Spreadsheet s)……

?????????????????? Spreadsheet s1(5,3);

?????????????????? myFun(s1);//??? s1與s中的指針成員指向同一塊內存(s是由s1通過復制構造函數生成的),當myFun()結束時,會釋放s,則s指針成員所指向空間釋放,導致s1的指針成員指向的空間釋放,即s1的指針成員指向一塊已經釋放的內存。

2、賦值運算符淺復制時的隱患

???????? Spreadsheet s1(2,2),s2(4,3);

???????? s1=s2;

???????? 則s1,s2中的指針成員指向了同一塊內存(s1的),導致s2的指針成員原來所指向的內存成了孤兒內存

???????? ∴重寫賦值運算符注意的三點

???????? 1,檢查自賦值情況。2,刪除原來所指向的內存,并用rhs的值重新分配內存。3,返回(*this),即對象的引用

3、也可將復制構造函數與賦值運算符設為私有(不必實現),禁止用戶這么做(比如數組類)

???????? private:

?????????????????? Spreadsheet (const Spreadsheet &src);

?????????????????? Spreadsheet &operator=(const Spreadsheet &src);

4、靜態數據成員:一個與類關聯而不是與對象關聯的數據成員

???????? 會默認初始化為0,在函數與方法體之外進行初始化

???????? int Spreadsheet::sCounter=0;?????????????????? //初始化

5、const數據成員:通常是靜態的

???????? 盡可能用static const 取代全局變量

???????? ∵是static ∴必須在源文件中為其聲明空間(方法體外)

?????????????????? 如?const int Spreadsheet::MaxValue=100;

???????? 另外,C++允許在類文件中聲明這些變量的同時為其賦值

???????? class Spreadsheet

???????? {

?????????????????? public : static const int MaxValue=100;

???????? }

6、靜態方法:方法應用于整個類,而不是單個對象

???????? ∴并不是在一個特定的對象上調用,即沒有this指針

???????? 不能在靜態方法中訪問非靜態成員

???????? 在類中像調用常規函數一樣調用靜態方法。

???????? 若聲明為public,則在類外可這樣調用

???????? string str=Spreadsheet::doubleToString(5);

7、const方法

???????? 如果有一個const對象或者對const對象的引用,編譯器不允許該對象調用任何方法(防止修改數據成員),除非是const方法

???????? 例如:double getValue() const;?????????????? //類定義中,即頭文件中

?????????????????? double SpreadsheetCell::getValue()??????? const

???????? {??????? return mValue;???????????????????????????????????? //方法定義中,即源文件中

???????? }//const不能修改數據成員,否則編譯器報錯

????????

???????? 非const對象可調用非const、const方法

???????? const對象只能調用const方法

8、關鍵詞mutable

???????? 在const方法中,編譯器不允許修改普通數據成員,但可在const方法中修改mutable數據成員

???????? 如在類定義中:mutable int NumberAccess;

???????? 則可在const方法中修改NumberAccess的值

9、函數重載:補遺

???????? 可以編寫兩個同名且參數相同的方法,一個聲明const,一個不聲明

???????? 若提供const對象,調用const方法,反之亦然

10、內聯

???????? 法一:在類定義中inline聲明,方法定義中實現

???????? 法二:類定義中直接寫出其方法定義,即在類定義中展開代碼,無需關鍵詞inline

11、友元

???????? 類可以將其他非成員函數聲明為友元,可以訪問protected、private成員和方法

???????? 類的內部會暴露給其他類或函數,破壞抽象原則

???????? 所以,在有限的情況下(如運算符重載)使用友元

轉載于:https://www.cnblogs.com/yangtianxing/archive/2012/06/04/2535374.html

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

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

相關文章

請不要對我說“你要馬上把這個小問題修改好”

“我需要”,“小問題”,“立刻”。你激怒我了。你的每個詞都激怒我了。這種情緒很難翻譯成英語表達,但在荷蘭,有些人就是用這種方式要求你。翻譯成英語,這有點像“你要幾分鐘內把這個東西修改好”。大家都知道的這樣的…

javascript 常量_JavaScript中的常量

javascript 常量JavaScript常數 (JavaScript Constants) Before ES15, the only way to declare variables using the var keyword. JavaScripts inbuilt feature of hoisting variables could be carried out using the var keyword. If youre unfamiliar with variables in J…

GDB與遠程(交叉)GDB調試

GDB提供的功能 1、啟動的程序,可以按照自定義的要求運行程序 2、可以讓被調試的程序在指定的斷點處停住(斷點可以是條件表達式) 3、當程序被停住時,可以檢查這個時候程序中發生的事 4、動態地改變程序的運行環境。 遠程(交叉)GD…

OTR-Linux控制臺打印顏色區分.

What I write, what I lost. 對于依靠打印來作debug的主要手段的, 能夠區分打印中的debug信息和error信息便顯得非常重要. 原文的介紹有一篇關于控制臺顏色的文章http://www.ibm.com/developerworks/cn/linux/l-tip-prompt/tip01/ 有定義實現各種顏色的方式. 以此為基礎, 方式挺…

c#異常處理_C#中的異常處理

c#異常處理What an exception is? 有什么例外? An exception is a runtime error; that means an abnormal situation which is created at run time and the program doesn’t execute successfully. Due to the exceptions, our program gets crash. 異常是運行…

(轉)走進AngularJs(六) 服務

原文地址:http://www.cnblogs.com/lvdabao/p/3464015.html 今天學習了一下ng的service機制,作為ng的基本知識之一,有必要做一個了解,在此做個筆記記錄一下。 一、認識服務(service) 服務這個概念其實并不陌…

Linux驅動程序框架以及概述

目錄驅動程序三種基本類型(組成)設備驅動程序功能驅動程序的內核模塊機制(開發模式)驅動程序框架三個主要部分1、字符設備驅動程序框架2、塊設備驅動程序框架2、網絡設備驅動程序框架驅動程序三種基本類型(組成&#x…

curl 使用整理(轉載)

我一向以為,curl只是一個編程用的函數庫。 最近才發現,這個命令本身,就是一個無比有用的網站開發工具,請看我整理的它的用法。 curl網站開發指南 阮一峰 整理 curl是一種命令行工具,作用是發出網絡請求,然…

Linux內核邏輯結構

linux內核從邏輯上可以分為5個部分: 1、進程調度 進程調度控制進程對CPU的訪問。當需要選擇下一個進程運行時,由調度程序選擇最值得運行的程序。可運行進程實際上是僅等待CPU資源的進程,如果某個進程在等待其他資源,則該進程是不可…

對批量文件重命名

一、 文件夾下存放各種不同名稱的同類型文件 F:\test 二、重命名格式從a0開始,數字依次遞增,a0,a1,a2,a3… import ospathr"F:\test"#要修改文件的路徑 namer"a"#命名從什么開始 num0#默認從0開始,即a0,a1,a2...... …

替換Quartus 自帶編輯器 (轉COM張)

正文 此處以Quartus II 11.1和Notepad v5.9.6.2為例。 1. 使用QII自動調用Notepad來打開HDL、sdc、txt等文件;并且可以在報錯的時候,Notepad可以直接高亮所報錯的行(此模式下,Notepad最大化后效果最佳)。 方法&#xf…

scala 方法重載_Scala中的方法重載

scala 方法重載Scala方法重載 (Scala method overloading) Method overloading is a method that is redefined in different ways under the same name. Method overloading is one of the methods used to implement polymorphism in Scala. 方法重載是一種使用相同名稱以不…

C#網頁自動登錄和提交POST信息的多種方法 新人學習中

網頁自動登錄和提交POST信息的核心就是分析網頁的源代碼(HTML),在C#中,可以用來提取網頁HTML的組件比較多,常用的用WebBrowser、WebClient、HttpWebRequest這三個。 以下就分別用這三種方法來實現:1、WebBr…

四、采集和制作數據集

一、采集數據 安裝labelme:pip install labelme 打開labelme:labelme 將收集好的照片(320320,png格式)存放到一個文件夾中,例如我的是F:\test,再此文件夾下再創建個文件夾label用于存放標簽文件 使用labelme打開數據…

MTFBWU的完整形式是什么?

MTFBWU:愿力量與您同在 (MTFBWU: May The Force Be With You) MTFBWU is an abbreviation of “May The Force Be With You". MTFBWU是“愿力量與你同在”的縮寫 。 It is an expression, which is commonly used in messaging or chatting on social media n…

VMware14.0 安裝 CentOS7.2

大致流程 對于VMware14.0安裝包用百度網盤下載即可。 鏈接:https://pan.baidu.com/s/1DEGa47EbI1Fup_MTXhv0xg 提取碼:izo6 華為云CentOS7 下載劃線的。其他步驟與大致流程里一樣。 最后輸入root 以及配置的密碼即可:密碼輸入時是沒有任何顯…

基于visual Studio2013解決C語言競賽題之1049抓牌排序

題目解決代碼及點評/* 功能:插入排序。許多玩牌的人是以這樣的方式來對他們手中的牌進行排序的:設手中原有3張牌已排好序,抓1張新牌,若這張新牌的次序在…

學習Lucene筆記一:創建索引

public class HelloLucene {/*** 建立索引* param args*/public void index(){IndexWriter writer null; try {//1.創建Directory,// Directory directory new RAMDirectory();//索引是建立在內存中的Directory directory FSDirectory.open(new File("D:/Lucene/ind…

【C++進階】C++創建文件/屏幕輸出流類(將信息同時輸出到文件和屏幕)

在軟件的調試技術中,很重要的一個技術是將軟件運行過程中的一些信息寫入到“日志文件”中。但是同時還要將信息顯示到屏幕上,以方便程序員實時查看這些信息。 最簡單的一種辦法是這樣的: std::ofstream output("debug.log", ios::…

五、加載數據集

之前寫過加載數據集的一些小筆記,這里詳細內容就不再敘述了 詳細學習可以參考該博文二、PyTorch加載數據 一、分析 因為U-net網絡架構是輸入1通道,大小為(572,572)的灰度圖,圖片大小無所謂,我的思路是將三通道的圖像使用OpenCV進…