目錄7.5.2 委託建構函式
7.5.3 隱式的類型別轉換
7.5.4 類的靜態成員
觀察下面兩段建構函式的**
//初始化bookno,units_sold,revenue
sale_data(const string &s, unsigned cnt, double price) :
bookno(s), units_sold(cnt), revenue(cnt*price) {};
//對bookno,units_sold,revenue賦值
sale_data(const string &s, unsigned cnt, double price)
有些時候必須用初始化,而不能用賦值
#includeusing namespace std;
struct x;
x(int ii)
};
如果類成員是const, 引用或其他必須初始化(沒有預設建構函式)的型別,那麼必須用建構函式初始值列表進行初始化初始化的順序由宣告順序決定,與建構函式初始值列表無關
#includeusing namespace std;
class x;
};int main();
};
//採用預設實參的建構函式可以充當預設建構函式使用
class x;
};
class sale_data
//委託的建構函式
sale_data() : sale_data(" ", 0, 0) {}
sale_data(string &s) : sale_data(s, 0, 0) {}
sale_data(istream &io) : sale_data()
private :
string bookno;
unsigned units_sold;
double revenue;
};
如果乙個建構函式只接受乙個引數,那麼它實際上定義了乙個該引數轉換為類型別的隱式轉換機制
用類名訪問#includeusing namespace std;
用class x
//此處的引數必須為const,否則無法接受 常量
x &combine(const x &y)
string s;
};int main()
static
關鍵字宣告類的靜態成員,它與類直接關聯,對所有類的物件可見,被所有物件共享,但不屬於任何乙個物件。
class account
//...
};
double r = account::rate();
用類的物件或物件的引用或指標訪問
account ac1,&ac2;
account *ac3 = &ac1;
r = ac1.rate();
r = ac2.rate();
r = ac3->rate();
C primer 7 5 建構函式再探
這兩個函式從執行的結果上看沒有區別,但是 第乙個函式執行的過程相當於 string foo abc 定義並初始化第二個函式執行的過程相當於 string foo foo abc 先定義 再賦值,且在定義時會執行預設初始化 第乙個過程明顯優於第二個 如果沒有在建構函式的初始值列表中顯式地初始化成員,則...
建構函式再探
建構函式基礎知識 建構函式初始值列表 初始化與賦值 建構函式使用初始值列表還是在函式體中給資料賦值的區別在於,前者是初始化了它的資料成員,後者是對資料成員執行了賦值操作。在很多類中,初始化和賦值的區別事關底層效率問題 前者直接初始化資料成員,後者則先初始化再賦值。除了效率外更重要的是,一些資料成員必...
足跡C primer 19 建構函式再探
sales data sales data const string s,unsigned cnt,double price 這個建構函式和這個效果是一樣的 sales data const std string s,unsigned n,double p bookno s units sold n...