面向對象高級編程(上)-- 第二週學習筆記(Boolan)

1,拷貝構造函數

String s3(s1);  // 以s1爲藍本設定到s3上

2,拷貝賦值this

s3 = s2;

3,若是沒有自定義拷貝構造和拷貝賦值,編譯器會自動生成,可是默認的拷貝構造和拷貝賦值只會很忠實的一個bit一個bit的拷貝過去,對於複數夠用;可是對於帶有指針的則不是很好,由於對於指針賦值,是兩個指針指到同一個地方,而不是真正的拷貝,這個是淺拷貝,並且容易引發內存泄漏
4,只要類中有定義指針,必定要寫拷貝構造和拷貝賦值函數
5,析構函數
   當離開做用域的時候,析構函數會被自動調用
   若是沒有這個析構函數,動態分配的內存就會形成內存泄漏了
6,字符串兩種表示方法
  1,有長度和字符兩個信息
  2,在字符的結尾有一個'\0'結尾
7,strlen計算的值不包含結束符
8,以下兩種方式都調用了拷貝構造函數,行爲一毛同樣spa

 String s2(s1);
 String s2 = s1;
 而「String s2; s2 = s1;」調用的是拷貝賦值函數

9,檢測自我賦值----效率高,不單單效率高,若是不這樣,還可能會出錯操作系統

if(this == &str)
    return *this;

10,stack(棧)
  是存在於某做用域(scope)的一塊內存空間。例如當調用函數,函數自己即會造成一個stack用來放置它所接收的參數,以及返回地址。
  在函數本體內聲明的任何變量,其所使用的內存塊都取自上述stack。
11,heap(堆)
   是由操做系統提供的一塊global內存空間,程序可動態分配從其中得到若干區塊
12,array new 必定要搭配 array delete
13,static
  1,class裏的static數據只有一份,銀行戶頭,利率對於全部人都同樣
  2,class裏的static函數沒有this,只能處理靜態數據
  3,靜態數據須要在外部定義
  4,靜態函數能夠經過object調用和經過class調用
14,把ctors放在private區
   靜態數據只有一份
   靜態函數被class調用
   返回對象調用setup函數
 Singleton指針

class A 
{
public:   static A& getInstance( return a; );   setup() { ... } private:   A();   A(const A& rhs);   static A a; ...
};

調用方式:A::getInstance().setup();code

Meyers Singleton
class A
{
public:
    static A& getInstance();
    setup() { ... }
private:
    A();
    A(const A& rhs);
    ...
};
A& A::getInstance()
{
    static A a;
    return a;
}

調用方式:A::getInstance().setup();
15,類模板會形成代碼的膨脹
16,函數模板---類模板中的關鍵字typename和函數模板中的class是相通的,都同樣對象

template <class T>
inline const T& min(const T& a, const T& b)
{
    return b < a ? b :a;
}

17,namespace
   防止重名blog

namespace std
{
    ...
}
相關文章
相關標籤/搜索