1.友元類的宣告
class tv;
class remote;
2.友元成員函式
不想使用友類所有函式都變成友元,可以使用友元成員函式。
!!編譯器本身的符號解析和編譯時按順序來的,導致友元成員寫起來要注意順序。
class a ; //a要前向宣告,否則b中不知道是什麼
class b ;
class a ;
inline
void b::fn(a& temp)
如果巢狀類是在另乙個類的私有部分宣告的,則只有後者能夠使用它,如下。
class a;
public:
b temp;
};其餘的保護還有公共屬性方面,和基本的資料成員的訪問許可權是一樣的。
#include
#include//異常的標頭檔案
using
namespace
std;
int main()
cout
<<1.0/(a+b);
return
0;}
try
catch(const
char *s)
void fn()
如果引發了一場卻沒有try塊匹配或沒有匹配的處理程式的時候,預設情況下,程式最終將呼叫abort()函式。
除了字串之外,throw可以返回一切型別,同時使用多個catch進行捕獲進行對應的處理,沒有匹配型別不會進行轉換,會呼叫 abort()函式
class temp;
trycatch(const
char *s)
catch(const temp& s)
cathc(...)
void fn()
try {}捕獲的異常不一定是在下一層函式,反是在這個過程中throw的異常都會**獲到。 從引發異常的函式條到包含try塊和處理程式的函式,涉及到棧解退。
棧解退:函式由於出現異常而終止。陳旭將釋放棧中的記憶體,但不會在釋放棧的第乙個返回位址後就停止,而是繼續釋放棧,直到找到乙個位於try塊中過得返回位址。
!!棧解退會導致記憶體洩漏,如下程式
void fn()
!!避免方式,使用try..catch處理,
void fn()
catch(exception& ex)
...delete ar; //棧解退導致此句來不及執行。
}
rtti(runtime type identification)執行時確定型別
rtti函式值適用於包含虛函式的類
dynamic_cast轉化
轉化的型別如果是繼承中的高層類(派生)轉給底層類,是安全的,否則不安全,dynamic_cast在不安全轉化的時候將會返回空指標。
class a
...};
class b:public a;
class c:public c;
a* ao=dynamic_cast(new b); //ok
b* bo=dynamic_cast(new a); //null
//dynamic_cast對於引用,不安全的時候會出現異常
trycatch (const exception& e)
typeid
返回的是乙個type_info的物件的引用,type_info是乙個記錄了物件型別的結構,其中含有成員函式name()可以指出當前類的名字,並過載了 == 和 !=運算子
運算子返回乙個指出物件的型別的值
a ao;
b bo;
type_id(ao) == type_id(bo); //0
cout<
C Primer Plus閱讀筆記
成員函式的讀取方式解決了空格字元本身的讀取問題,彌補了第一種普通讀取方式的不足。書中第153頁的例子對此進行了很好的說明。此外,值得注意的是,cin.get 成員函式支援過載,例如cin.get 返回乙個字元,而cin.get ch 返回乙個cin物件。1 可以修改指標的值,而陣列名是常量 2 對陣...
《C Primer Plus》開頭閱讀筆記
已經入了門,因此只看個開頭,後面對於c的具體介紹主要在 the c programming language 中閱讀。1.編寫 前的定義程式目標和設計程式步驟很重要,每次程式設計工作做完後需要進行總結,對過程中進行了什麼改變進行記錄。2.window ide中,可能遇到顯示程式執行的視窗在程式終止時...
c primer plus閱讀筆記(一)
int a 1 undigned int b 0 cout 4294967295 typename value c typename value c static cast value 更加嚴格的強轉auto a 100 int auto b 10.0 double auto iter vector...