成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

(六)深入函數(shù)-創(chuàng)新互聯(lián)

普通函數(shù)的重載(六)深入函數(shù)
跟java沒區(qū)別 都是同樣的方法名,不同的參數(shù)。

缺省參數(shù)的函數(shù)

成都創(chuàng)新互聯(lián)專注于孝昌企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站開發(fā),商城網(wǎng)站開發(fā)。孝昌網(wǎng)站建設(shè)公司,為孝昌等地區(qū)提供建站服務(wù)。全流程定制網(wǎng)站開發(fā),專業(yè)設(shè)計,全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
#include <iostream>
using namespace std;
class A{
public:
  void set(int =30,int=5);
  void count(bool=false);
private:
  int w;
  int h;
};
void A::set(int width,int height){
  w=width;
  h=height;
}
void A::count(bool val){
  if(val==true){
    cout<<"val的值為真時:"<<w*h<<endl;
  }else{
    cout<<"val的值為假時:"<<w*h/2<<endl;
  }
}
int main(){
  A a;
  a.set();
  a.count();
}
c++中可以寫這種缺省的函數(shù),java中應(yīng)該是不可以,我個人沒寫過,也沒有見別人寫過,時間有限就不寫demo測試了,有興趣的可以試下。
不過似乎c++中這種默認(rèn)的方法必須 不是內(nèi)聯(lián)函數(shù)才行,也就是聲明跟方法分開寫。

成員變量初始化

c++中有一種特殊類的成員變量初始化的寫法
例:
class rectangle{
public:
  rectangle():length(3),width(5){}
private:
  const int length;
  const int width;
}
在構(gòu)造函數(shù)的右邊有個冒號 (:),然后是成員變量的名稱和一對小括號(),小括號中是要初始化的值或者表達(dá)式,如果對多個成員進(jìn)行初始化,那么就要用逗號將它們隔開,最后是一對大
括號{},大括號中就是函數(shù)所要執(zhí)行的功能。
這種方式是對成員變量的初始化,而 rectangle(){length=3;}這種方式是對成員進(jìn)行賦值,當(dāng)成員有const修飾符 是常量時,賦值的方式就會報錯。
對于像常量和引用只能被初始化,不能被賦值.我們最好在構(gòu)造函數(shù)的函數(shù)頭中對常量和引用進(jìn)行初始化。

復(fù)制構(gòu)造函數(shù)

class A{
public :
  A(){}
  A(A&one){n=one.n;m=one.m;}//這是復(fù)制構(gòu)造函數(shù),系統(tǒng)默認(rèn)就有的,我們可以復(fù)寫也可以不管,在引用一節(jié)有關(guān)于這個的測試。
  A(int i,int j){n=i;m=j;}
  void print(){
    cout<<n<<m;
  }
private:
  int n;
  int m;
}
int main(){
  A a(2,4);
  a.print();
  cout<<" ";
  A b(a);
  return 0;
}

構(gòu)造函數(shù)與new運(yùn)算符

在c++中創(chuàng)建實(shí)力對象,是通過指針來引向內(nèi)存空間的。
A *a;
a=new A;
a->set(3,4);
而java中 是 A a=new A();

explicit關(guān)鍵字

class A{
public:
  explicit A(int x){i=x;cout<<"構(gòu)造函數(shù)執(zhí)行!"<<i<<endl;}
  ~A(){cout<<"析構(gòu)函數(shù)執(zhí)行!"<<i<<endl;}
  void get(){cout<<i<<endl;}
private:
  int i;
};
int main(){
  A a(99);
  a.get();
  a=1000; //對于c++來說 這句話相當(dāng)于 a=A(1000);會自動調(diào)用默認(rèn)構(gòu)造函數(shù),當(dāng)加上explicit關(guān)鍵字時,就不會進(jìn)行隱式轉(zhuǎn)換了。
  return;
}

復(fù)制構(gòu)造函數(shù)

編譯器提供了默認(rèn)構(gòu)造函數(shù)和析構(gòu)函數(shù),同樣也提供了復(fù)制構(gòu)造函數(shù),編譯器提供的默認(rèn)復(fù)制構(gòu)造函數(shù)只是把傳遞進(jìn)來的對象的每個成員變量復(fù)制到新對象的成員變量中去,然后兩個對象中
的變量均指向存放類成員變量的那塊內(nèi)存區(qū)域.加入該變量不是指針變量一般不會立即出錯,加入該變量是指針變量,如圖:(圖片插入總失敗 我就簡單的表示下吧)

  對象a            -->堆<--      復(fù)制的對象b
  指針變量x            6        指針成員變量x

現(xiàn)在對象a 有一個指針成員變量x,它指向堆中存放6的那塊內(nèi)存區(qū)域,我們將對象a復(fù)制到對象b,如: A b=(a); 由于要復(fù)制對象,因此自動調(diào)用默認(rèn)復(fù)制構(gòu)造函數(shù),調(diào)用的過程為為:
首先將對象a作為參數(shù)傳遞到默認(rèn)復(fù)制構(gòu)造函數(shù)中,然后將對象a的指針成員變量x復(fù)制到對象b中,這樣兩個對象的指針x現(xiàn)在都指向同一內(nèi)存區(qū)域。
這樣當(dāng)這兩個對象中的任何一個超出作用域時,都會出現(xiàn)致命的錯誤。比如說我們將對象a刪除,那么析構(gòu)函數(shù)會自動釋放堆中存放6的那塊內(nèi)存空間,而對象b的指針變量x扔指向該空間,
由于該空間已經(jīng)不在,那么對象b的指針變量x現(xiàn)在就變成了一個迷途指針,該程序面臨崩潰的邊緣。
為了解決淺層復(fù)制導(dǎo)致的迷途指針問題,我們必須創(chuàng)建自己的復(fù)制構(gòu)造函數(shù),并且在函數(shù)里為我們的成員變量分配內(nèi)存,這樣,在分配完內(nèi)存后,舊對象的成員變量就可以復(fù)制到新的內(nèi)存區(qū)域
中,兩個對象的成員變量都各自擁有自己的內(nèi)存區(qū)域,一個對象在析構(gòu)后不再會影響到另一個,我們把這種復(fù)制方式叫做深層復(fù)制。例:
class A{
public:
  A(){x=new int;*x=5;}
  ~A(){delete x;x=NULL;}
  //定義一個深層的復(fù)制構(gòu)造函數(shù)
  A(const A&a){//因?yàn)樵谶@個函數(shù)體中不會修改別名a所引用的原始對象的值.所以將別名a定義為別名常量。這樣加入我們試圖修改傳遞進(jìn)來的對象,程序就會報錯。
    cout<<"復(fù)制構(gòu)造函數(shù)執(zhí)行... "<<endl;
    x=new int;//用復(fù)制構(gòu)造函數(shù)創(chuàng)建的新對象的指針成員x來指向它。這樣兩個對象的x指針都指向了不同的內(nèi)存空間。
    *x=*(a.x);//先通過對象a調(diào)用x指針成員后,再通過"*"讀取x指針指向的空間處的值。
  }
  void print()const{cout<<*x<<endl;}
  void set(int i){*x=i;}
private:
  int *x;
}

網(wǎng)頁題目:(六)深入函數(shù)-創(chuàng)新互聯(lián)
URL地址:http://jinyejixie.com/article46/jeoeg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、營銷型網(wǎng)站建設(shè)品牌網(wǎng)站建設(shè)、響應(yīng)式網(wǎng)站、電子商務(wù)虛擬主機(jī)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司
醴陵市| 深水埗区| 福建省| 山西省| 芮城县| 天门市| 神池县| 屏南县| 五常市| 南阳市| 耒阳市| 嘉兴市| 宜春市| 石狮市| 庆安县| 闸北区| 台东市| 长葛市| 盱眙县| 台中市| 沂南县| 格尔木市| 柳江县| SHOW| 曲阜市| 迁安市| 长岛县| 鲁甸县| 石城县| 津市市| 金平| 乌拉特后旗| 浦东新区| 神农架林区| 望奎县| 彝良县| 鄂州市| 许昌市| 连云港市| 东辽县| 广灵县|