足跡C primer 19 建構函式再探

2021-06-22 08:11:27 字數 1770 閱讀 2297

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),revenue(p*n){}

當成員是const型別或者是引用的時候就必須將其初始化,或者是類型別的時候,且該類沒有建構函式定義的時候,那麼也要將其初始化

class constref

;//錯誤的建構函式的初始化

constref::constref(int ii)

//正確的開啟方式

constref::constref(int ii):i(ii),ci(ii),ri(i)

建議:使用建構函式初始值(就是上面的正確開啟方式)

在很多類中,初始化和賦值的區別事關底層效率問題,前者(就是上面的正確開啟方式)直接初始化,後者(賦值錯誤開啟方式)先初始化後賦值。

成員初始化的順序和他們在類定義中的出現順序一致。

class x

};

//建構函式

sales_data(const std::string &s, unsigned n, double p):

bookno(s),units_sold(n),revenue(p*n){}

//其餘建構函式都委託給另外建構函式

sales_date():sales_data("",0,0) {}

sales_data(std::string s):sales_data(s,0,0) {}

seles_data(std::istream &is):sales_data()

聚合類使得使用者可以直接訪問其成員,並且具有特殊的初始化語法形式。

一般使用struct定義的類就是聚合類

並且宣告乙個類的物件的時候,初始值順序必須和宣告順序一致

class debug

constexpr debug(bool h, bool i, bool o):hw(h),io(i),other(o) {}

constexpr bool any()

void set_io(bool b)

void set_hw(bool b)

void set_other(bool b)

private:

bool hw; //硬體錯誤

bool io; //io錯誤

bool other; //其他錯誤

};

使用了constexpr的建構函式意味著1、不能有返回值2、擁有唯一可執行的語句返回語句。。。。綜合就是函式體應該是空的。

這裡我覺得書上這樣翻譯純屬扯淡,自相矛盾,應該看英文版本的!!!可惜my english is very pool!!

ps:堅持不懈,不在多,而在精華,但是有時候會給一點糟粕,那是因為時間過得太快,不能再那些沒必要的小事上浪費時間,但是碰到自己不熟悉的,不清楚的那麼你就得好好看看一看,停下腳步認真的學一學了!!!!

足跡C primer 10 函式基礎

c 語言中,名字有作用域,物件有生命週期。名字的作用域是程式文字的一部分,名字在其中可見。物件生命週期是程式執行過程中該物件存在的一段時間。size t count calls int main return 0 和其他名字一樣,函式的名字也必須在使用之前宣告。類似於變數,函式只能定義一次,但可以宣...

足跡C primer 12 函式過載

main函式不能過載 record lookup const account account是乙個型別 record lookup const phone record lookup const name account acct phone phone record r1 lookup acct ...

足跡C primer 14 函式匹配 函式指標

1.精確匹配 2.通過const轉換實現的匹配 3.通過型別提公升實現的匹配 4.通過算術型別轉換或者指標轉換 5.通過類型別轉換實現的匹配 如果過載函式的區別在於它們的引用型別的形參是否引用了const,或者指標型別的形參是否指向const,則當呼叫發生時編譯器通過實參是否是常量來決定選擇哪個型別...