先來談談什麼是物件導向(oop:object oriented programming)
拿做番茄炒雞蛋為例子。材料:雞蛋、番茄、油鹽等等,做法:放油、放雞蛋、放番茄、放雞蛋等等。這就資料和演算法。c語言更注重演算法,也成為面向過程,自上而下的設計,講究先討論是先放雞蛋還是先放番茄,再討論怎麼放,放多少的問題。
c++呢?更注重資料,也叫自下而上的設計,就是先把放幾個雞蛋都寫好,放乙個是乙個方法,放兩個是乙個方法,然後你怎麼放,直接呼叫這些方法就行了。所以前人栽樹辛苦點,後人乘涼很爽,適合大型的軟體設計。
那這就設計到封裝,把材料,放多少都放在乙個地方,然後後面直接呼叫就行了,這就是類。類裡面包含著資料和操作,比如雞蛋,然後寫上打乙個雞蛋、打兩個雞蛋的方法,取個名,叫雞蛋及使用;然後在主程式做番茄炒雞蛋的時候,直接呼叫雞蛋類、番茄類等類就行了。而且還可以擴充套件,加乙個韭菜類就可以韭菜煎雞蛋了。
再來看看定義
new delete和malloc free 的重要區別
new = malloc+構造;delete = 析構+free;
(對於類多用new和delete,對於基本資料型別沒什麼區別)
1.malloc/free是c/c++語言的標準庫函式,new/delete是c++的運算子。
2.new能夠自動分配空間大小。
類的初始化
三種方案:顯式 、隱式、構造+析構。
如果我們不寫建構函式,系統會提供乙個預設無參建構函式,什麼都不幹。不寫拷貝建構函式,系統也會提供乙個預設拷貝函式,稱為淺拷貝,主要初始化下成員變數,其實也基本什麼都沒乾。我們可以自己設定拷貝建構函式,稱為深拷貝,來初始化成員變數。
值得注意的是:只要寫了建構函式就必須用,系統不會再給預設的方式。
#include
using namespace std;
class test88
//有參建構函式
test88(int a)
//無引數建構函式
test88()
//賦值建構函式 copy建構函式
test88(const test88 &obj)
int getb()
void seta(int a)
void setb(int b)
private:
int m_a;
int m_b;
};void f ( test88 p ) //執行完後,會呼叫析構函式釋放形參
test88 g()
int main()
; for (int i=0;i<3;i++)
/////////
//////
//////
//////
//////
//////
////////
test88 t1; //預設的就是無參的
t1.seta(1);
t1.testprint();
//拷貝建構函式的四種應用場景
//第一種,賦值建構函式(和=操作是兩個不同的概念)
test88 t2 = t1;
t2.testprint();
//第二種,用t1初始化t2,和第一種差不多
test88 t3(t1);
t3.testprint();
//第三種,實參去構造形參
test88 t4(30);
f(t4);
t4.testprint();
//第四種,返回值構造
test88 t5;
t5 = g(); //此時用的是淺拷貝,就是=操作
t5.testprint();
t2 = t1; //是物件的=操作,系統提供的淺拷貝
return
0;}
c 中成員物件初始化和類繼承初始化
對於繼承的物件,建構函式在成員初始化列表中使用類名來呼叫特定的基類建構函式。對於成員物件,建構函式則使用成員名。例如 ifndef h frabjous define h frabjous include class frabjous virtual void tell gloam gloam in...
物件導向 類 類 例項初始化)
1 類的成員 public class testblock class myclass 結果為 這是非靜態 塊 無參構造 在每次建立物件時都執行 public class testblock class myclass public myclass string str 結果為 這是非靜態 塊 無參...
C 類和物件 物件的初始化和清理
4.2.1 建構函式和析構函式 物件的初始化和清理也是兩個非常重要的安全問題 乙個物件或者變數沒有初始狀態,對其使用後果是未知 同樣的使用完乙個物件或變數,沒有及時清理,也會造成一定的安全問題 c 利用了建構函式和析構函式解決上述問題,這兩個函式將會被編譯器自動呼叫,完成物件初始化和清理工作。物件的...