學習C 第一天

2021-04-26 05:53:13 字數 4892 閱讀 4646

常用的:#include

#include中

定義了流控制符,來控制資料的輸出格式

dec hex oct 分別為十進位制 十六進製制 八進位制

setw(n)輸出域寬為n

setfill(c)在給定的輸出寬度內,填充字元c

........等

例:cout如:上面的第二句,同樣以十六進製制嗎,填充『#』的方式輸出。

內斂函式 inline

:呼叫這樣的函式時,把**直接插入到呼叫點,而沒有程式跳轉,返回一系列問題了 

這樣的函式中,不能有複雜的語句 如:switch while,不能遞迴

一般只有1~5行語句的小函式

過載函式:(

對於一些具有同一功能的函式,但函式引數不同)

即,可以定義一些函式名相同的函式,但至少形參的個數,型別或順序上不同。

在呼叫時,傳入相應的實參,系統就可以和傳入的實參分辯,呼叫相應的正確的函式!

預設引數的函式

:p78  :不傳入引數的話,就用預設引數!! 例:

#include<>

void sum(int num=10);//如果有函式說明,預設引數就在說明中提供

void main()

sum(100);//用100傳入

sum();//使用預設引數

void sum(int num)//這裡就不用提供預設引數了

關於const指標:

1.指向唯讀資料的指標變數!

const int *p;

即:指標指向的資料不能寫入(改變),但指標可以改變指向!

2.指標常量

char *const p="adcfdg";

用這種方法定義的指標變數,指標指向不能改變,但指標所指的資料內容可以改變。

如:(接上)  p="xtyz" //錯的,它改變了指標的指向!

(接上) *p='s'; //對的(多了個*),只是改變了指向內容的值!

3.指向常量的指標常量

顧名思義:指向不能改變,指的內容也不能改變

引用:int a ;

int &ra=a;

從此ra是a的別名!!

引用作為函式的引數:

void swap(int &p1,int &p2)

呼叫函式,實參傳給兩個引用,函式中對p1,p2的操作就是直接對兩個實參的操作!

注意:p1,p2不會分配記憶體。而用一般變數傳遞函式,會分配記憶體!

有關記憶體分配:

看例子:

#include

#include

int *number,*p,*q;

number=new int[100];//分配乙個有100個int型元素的陣列!!!!

p=new int(11);//分配乙個int型的記憶體空間,初值為11

q=(int*)malloc(10*sizeof(int));

if(nmber==null||p=null||q==null)

else ;

delete number;//注意這個寫法!!!

delete p;

free(q);

建構函式:

其在類中,且函式名與類名相同,用於在物件定義時,自動被呼叫給物件初始化。 例:

class person

private:.......

public:

person(***,***,***,***);

void person::person(***,***,***,***)

//給相應的資料成員賦值

void main()

person obj("zoushuai",***,***,***);//定義物件,帶上初始值。

//之後,就定義並生成物件obj,然後自動呼叫建構函式person.再將初始值傳遞給建構函式相應的形參!,最後執行構造

//函式體,將相應的值附給相應的資料成員!!!

析構函式:

同建構函式(為物件分配相應資源)功能相反,析構函式用來釋放之前分配的資源!

函式如下:其被系統自動呼叫!如果在類的物件中沒有分配動態記憶體(new),可以用系統提供的預設的析構函式.(如果程式設計師在類中,沒有為類提供析構函式,就會預設生成乙個。你看不到,但存在!)。如果有!:則必須為該類提供析構函式以完成清理工作(delete)!

~類名()

//函式體

利用初始化表對常量資料成員或引用成員提供初值!

例:class silly

public:

silly()//這樣的建構函式是錯誤的!

ten=10;

refi=i;

protected:

const int ten;//常量資料成員

int &refi;//引用refi

上面的是錯誤的:因為,在建構函式執行之前,物件結構已經建立(已生成),資料成員已存在,而且,ten是const唯讀的! refi為引用!在建構函式內是不能在對其指派新值的!

但可以這樣:

在類外定義時:(在類內的public中即寫:silly();實現則在類外!如下)

silly::silly():ten(123),refi(i)//資料成員名(值),資料成員名(值),。。。。。。。 {}

繼承與派生:原來類的程式**可通過繼承而在新類中得到重用。

在基類的基礎上定義其派生類的定義形式:

class 派生類名(自定): 訪問方式 基類名

//即,在基類的基礎上可以新增新的成員

「訪問方式」即繼承方式 可以使private(私有繼承)和public(共有繼承) ,如果省略則是private

基類與派生類的關係

按public方式繼承時:基類中的共有成員和保護成員在派生類中不變

按private方式繼承時:基類中的共有成員和保護成員在派生類中都為私有成員

基類中的私有成員在派生類中是不可訪問的!!!!!!!!!!!!!

基類的建構函式是不會被繼承的!!

所以,在設計派生類的物件時,派生類的建構函式除初始化其自身定義的資料成員外,還必須對基類中的資料成員進行初始化(即還要呼叫基類的建構函式!!!)

派生類名::派生類建構函式名(參數列):基類建構函式名(參數列)

注:派生類建構函式的引數中包括引數的型別和引數名,而基類建構函式的引數中只有引數名!而且這些引數必須**於派生類建構函式名後面括號後的引數(即要在派生類建構函式參數列中定義)。

多重繼承:

class 派生類名:訪問方式 基類名1,訪問方式 基類名2......

在多重繼承下,系統首先執行各基類的建構函式,再是派生類的。。。。。。。。。

虛基類:

它是這樣的:它雖然被乙個派生類間接地多次繼承,但派生類卻只繼承乙份該基類的成員。

將乙個基類宣告為虛基類:

class 派生類名: virtual 訪問方式 基類名

虛函式:

因為用基類指標指向公有派生類物件,指標僅能看到派生類中的基類部分。但是,如果做以下改變。能訪問的就不同了。

虛函式的定義:

class 類名

。。。。。。 }

當乙個類的成員函式宣告為虛函式後(如上),就可以在該類的派生類中定義與其基類虛函式原型相同的函式(函式名,返回型別,引數個數等完全相同)(雖然沒有加上關鍵字virtual,都將被視為虛函式)。這時,當用基類指標指向這些派生類物件時,系統會在程式執行過程中,動態的自動選擇函式,從而實現了執行時的多型性。(當通過基類指標多次呼叫虛函式時,由於指標所指向物件的不同,而呼叫不同物件所屬類的虛函式)。

純虛函式:

純虛函式的宣告如下:

virtual 函式原型=0;

純虛函式 是只在基類中宣告但未給出具體的函式的實現,因此,用帶有純虛函式的基類中派生出的派生類,都必須定義與純虛函式同名的過載函式。(這樣,基類只是用於繼承,僅作為乙個介面,具體功能在派生類中實現!)

例子:class shape

;class ******** : public shape

;class rect : public shape

;void main()

宣告了純虛函式的類,稱為抽象類。

注意:抽象類不能宣告物件,只能用來派生。

抽象類中可以有多個純虛函式

抽象類中也可以定義其他非純虛函式 

友元函式:

用friend 字首宣告的函式(在類的定義中宣告(在private或public中宣告沒有區別)),該函式就可以訪問,類的私有成員了! 這個函式不是類的成員函式!

友元類:

friend class b

在乙個a類中,把另乙個b類定義為友元類,則b類就可以訪問a類中的私有元素了!

類模組:

基本語法:template 《型別形式參數列》  class 類模組名

例:#include

//定義類模組abc

template class abc

private :

t arrat[i];

public:

void main()

abcabc2;//由模板abc生成物件abc2!這樣即生成了int 型別的大小為100的乙個陣列!!!就有這樣的方便

函式模組:

和上面相似:

template t  min(t x,t y)

return x呼叫時:

a=min(20,10);

b=min('a','a');

就是取消了型別的限制。  還可以帶來許多的方便,自己慢慢想想(ˇˍˇ) 想~

運算子的過載:(即把已有的運算子在指定的類中,定義為其他的功能!)

語法格式如下:

type x::operator @(形參表)

//函式體 重新定義運算子@在指定類x中的功能!

type:返回值型別

x:是需要過載該運算子的類名!

@:是需要被過載的運算子

c 學習 第一天

折騰了一天,終於知道了我對linux一竅不通,連個軟體都不會裝,誰會相信我四個月後會是怎樣。知道了兩個命令 sudo apt get install vim 安裝vim編輯器 sudo apt get install build essential 安裝gcc和gdb 儲存為hello.cpp,在g...

c 學習第一天

c 是乙個物件導向的語言。本人使用時使用的是centos7系統 首先centos7中自帶有c 的庫以及編譯器 標頭檔案所在目錄 ust include c 版本號 首先第乙個坑 輸出 c中stdin.h中有printf函式 c 中需要用到cout函式語法如下 std cout 變數或字串 std e...

學習第一天

知識是學會的,不是教會的 程式設計 驗證性或體驗性 創造性 學程式設計的4個階段 1.能看懂別人的 除錯別人的 2.能修改別人的 3.能拷貝別人的 做自己的事 4.能自己設計編寫 方法 多讀 做記錄 執行 修改 執行 練習,光說不練假把式 刷oj總結 寫部落格或許是個不錯的選擇 學生和已經工作的程式...