##對第二天所學內容深入
#工具vs2005
ps:再對面向過程程式設計和物件導向程式設計進行解釋。
例如:八戒吃西瓜
1、八戒.吃(西瓜)//物件導向,第一位是物件
2、吃(八戒,西瓜)//面向過程,第一位是函式(吃這個動作即是函式來實現的)
原有**存在的一些問題:當我們建立物件後,物件就應該具有相應的屬性,而不是在後續通過set函式對他進行賦值。
解決問題的方法是:用建構函式和析構函式
1、通過建構函式來完成物件的建立和初始化
2、通過析構函式來完成物件的銷毀
ps:建構函式和析構函式是系統自動呼叫的,如果不提供建構函式和析構函式,編譯器會提供建構函式和析構函式,編譯器提供的兩個函式是空的。如果提供了任意形式的建構函式,那麼編譯器將不再提供建構函式。
建構函式的分類:1、有參建構函式 2、無參建構函式
建構函式語法:
類名([形參列表])
注意:1、建構函式沒有返回值,也不能寫void
2、建構函式的函式名和類名一致
3、建構函式可以過載
4、建構函式在建立物件時會被呼叫一次
#include
using
namespace std;
//使用命名空間
class
person
person
(int a)
};void
main()
析構函式的語法: 函式體;
#include
using
namespace std;
//使用命名空間
class
person
~person()
//析構函式
};void
func()
void
main()
/*執行結果順序是
呼叫析構函式
呼叫無參建構函式
main()*/
拷貝建構函式:是一種t特殊的建構函式,用一種物件來初始化另乙個物件。
呼叫時機:當使用一種物件來初始化另乙個物件;將物件作為實參傳遞給函式形參;函式如果返回物件,通過拷貝建構函式傳遞給呼叫者。
語法:類名(const 類名&變數名)
#include
using
namespace std;
//使用命名空間
class
person
person
(const person&p)
};void
main()
/*執行結果順序是
呼叫拷貝建構函式
*/
深拷貝與淺拷貝:
淺拷貝:只是簡單的賦值拷貝,對於普通變數沒有問題,對於指標變數,如果只進行簡單賦值就會造成兩個變數指向同一塊記憶體,當執行析構函式時就會產生記憶體被重複釋放的錯誤!
深拷貝:在堆區重新申請了空間,再進行拷貝操作
#include
using
namespace std;
//使用命名空間
class
person
//建立有參建構函式,將成員變數用傳進來的引數進行初始化
person
(int age,
int height)
person
(const person&p)
~person()
public
:int m_age;
int*m_height;
};void
func()
void main (
)
設計乙個立方體類:計算立方體的面積和體積,要使用建構函式來進行初始化,能夠比較兩個立方體的提及大小。
#include
using
namespace std;
//使用命名空間
class
cube
cube
(double l,
double w,
double h)
cube
(const cube&c)
~cube()
public
:double
getmj()
double
gettj()
public
:double c_long;
double c_wide;
double c_heighjt;};
intcmpcube
(cube c1,cube c2)
else
if(c1.
gettj()
gettj()
)return0;
}void
main()
小結:學習了用建構函式和析構函式來建立和初始化物件,加強對**的編寫能力。 C 學習第三天
一些基礎就可以略過了,看書不能太呆板。如果把一本書看完了,剩下的就是在實際專案中進行整合,訓練,然後整理成筆記。每天敲點程式,記點筆記。變數作用域 include include include std string s1 hello 全域性int main 結果 hello world 42 wo...
第三天 c 學習
1 void my function const a 常引用 目的是為了使得實參不可以被修改 2 函式過載 函式引數預定義值會產生二義性 3 public 類的內外部都可以被訪問 porivate 只能在類的內部被訪問 protected 用在類的內部 繼承 4 析構 先建立的物件後析構,遵循堆疊原...
C 學習第三天
今天是學習的第三天,主要學習內容如下 1.c 字符集 2.識別符號構成規則 3.c 資料型別 4.轉義字元 5.符號常量 6.基本算數運算子 7.符合算數運算子 寫 抄 了個程式 include 讓程式包含iostream類 using namespace std 開啟命名空間,使用iostream...