Boolan C 課程第一周筆記

2021-07-30 22:00:41 字數 4444 閱讀 7585

第一周

20170407

類:帶指標

1、 不帶指標

object based(基於物件):

單一物件

object oriented(物件導向):

多個有關聯的物件

語言學習:

語言+標準庫

標頭檔案寫法(防衛式宣告):

#ifndef _complex_

#define _complex_

//前置宣告

//類的宣告

//類的定義

#endif 作用:無重複include 包含

inline(內聯)函式:

若函式在class內定義完成,便自動成為inline「候選人」。(最後不一定是,取決於編譯器的處理)

#ifndef _complex_h_

#define _complex_h_

//template ;

class complex

private:

double re, im;

};inline double complex::imag()const

inline void complex::setre(double num)

inline void complex::setim(double num)

#endif

帶預設引數的預設建構函式

建構函式

盡量所有的引數、返回值都傳遞引用

傳遞引用加const表示該值不能被改變: complex & operator +=(const complex&);

函式後面加上const

double real () const

不會改變資料內容

const類物件呼叫的成員函式也必須是 const函式

帶預設引數的預設建構函式

complex(double r = 0, double i = 0) :re(r), im(i){}//帶預設引數的預設建構函式

不帶指標的類多半不用析構函式

函式過載

double imag(double r)//過載

double imag()const;

但在編譯後的實際名稱不同。

易錯:以下建構函式不能過載:

complex(double r = 0, double i = 0) :re(r), im(i){}

complex() :re(0), im(0){}

友元函式

class complex

complex& operator += ( const complex&);

double real () const

doube imag () const

private:

double re,im;

friend complex& _doap1 (complex *,const complex&);

};inline complex& _doap1 (complex* fir,const complex& r)

相同class的各個objects互為friends(友元函式)

class complex

int func (const complex ¶m)

private:

double re,im;

};例:

complex.h

class complex

//帶預設引數的預設建構函式

void setre(double num);

void setim(double num);

double imag(double r)//過載

double imag()const;

double real()const

private:

double re, im;

};class friend_complex//友元函式

double outfri()const

double outfim()const

private:

double fri, fim;

};inline double complex::imag()const

inline void complex::setre(double num)

inline void complex::setim(double num)

#include

#include"complex.h"

using namespace std;

int main()

20170409

操作符過載

返回值可以用於操作符的連串使用

特殊的操作符用全域性函式

「<<」操作符應定義為非成員函式

ostream&

operator<< (ostream& os,const complex& x)//引數次序決定cout的位置

int main()

complex& operator +=(const complex&r)

#include

#include"complex.h"

using namespace std;

int main()

非成員函式的寫法

inline complex//非引用,因為是區域性變數

operator + (const complex& x,const complex&y)

inline complex//非引用

operator+(const complex&x,double y)

typename();//構造臨時物件,進行到下一行結束生命

return 不用reference 語法分析

傳遞者無需知道接受者是以reference形式接受;

不含static成員函式的物件呼叫成員函式的方式

complex c1,c2,c3;(real()不是static型別)

cout<

using namespace std;

#include"head.h"

double account::m_rate = 8.0;//初值化

int main()

結論:可以看出,直接通過class name呼叫時,可以直接改變之前object的static公有成員。私有成員不能通過classname呼叫

把建構函式放在private內(與static有關):

//只有乙個物件的類

class a

private:

a();

a(const a&rhs);…};

a& a::getinstance()

呼叫函式:

a::getinstance().setup();//使用class name呼叫

例:#ifndef _lyfstatic_

#define _lyfstatic_

class account

static account& set_rate(const double&x);

static double m_rate;

static account&creatraccount();

private:

account(const double&snu)

};account& account::set_rate(const double&x)

#endif

#include

using namespace std;

#include"head.h"

double account::m_rate = 8.0;

int main()

class template

#ifndef _lyfstatic_

#define _lyfstatic_

template

class account

account(const t &snu):m_rate(snu)

private:

t m_rate;

};#endif

#include

using namespace std;

#include"head.h"

int main()

優秀模板例:

#ifndef _lyfstatic_

#define _lyfstatic_

class stone

bool operator<(const stone&s)const

private:

int _w, _h, _weight;

};template //函式模板,不必明確指出型別

inline

const t & min(const t &a, const t &b)

#endif

#include

using namespace std;

#include"head.h"

int main()

Boolan c 學習第一周筆記

1.一種基於物件 object based 這種是單一的類的設計 一種物件導向 object oriented 多重class的設計 對於類中的變數和函式而言,資料有很多份但是函式只有乙份。2.標頭檔案的正規寫法 ifndef 頭檔名 define 頭檔名 endif 採用了防衛式宣告。3.c 中的...

Boolan STL 第一周筆記

容器是用來儲存資料的,資料可以試使用者自定義的類,也可以試預定義的型別。c 中的容器主要使用有array vector list set map等。stl中的容器裡都有分配器,在宣告乙個容器的模板第二個引數就是分配器。分配器是用來給容器分配記憶體的,在一般情況下,使用預設的分配器即可。在stl中要實...

第一周周記

下面是整個文章的第二部分,日常的安利 這周的話,除了整體恢復正常,週末我也購置了我的第一塊外接鍵盤,這裡的話我選擇的是國產的靜電容鍵盤niz的plum 87鍵鍵盤。今天拿到這個鍵盤第一天,整體使用了一下,尺寸配合著15寸的蘋果macbook pro可以說恰到好處,除此以外,整個鍵盤還是給我不少驚喜的...