最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++中對象的常引用、動態(tài)建立和釋放相關(guān)知識講解

 更新時間:2015年09月17日 15:24:40   投稿:goldensun  
這篇文章主要介紹了C++中對象的常引用、動態(tài)建立和釋放相關(guān)知識講解,是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下

C++對象的常引用
我們知道,一個變量的引用就是變量的別名。實(shí)質(zhì)上,變量名和引用名都指向同一段內(nèi)存單元。

如果形參為變量的引用名,實(shí)參為變量名,則在調(diào)用函數(shù)進(jìn)行虛實(shí)結(jié)合時,并不是為形參另外開辟一個存儲空間(常稱為建立實(shí)參的一個拷貝), 而是把實(shí)參變量的地址傳給形參(引用名),這樣引用名也指向?qū)崊⒆兞俊?/p>

[例] 對象的常引用。

#include <iostream>
using namespace std;
class Time
{
  public:
  Time(int,int,int);
  int hour;
  int minute;
  int sec;
};
Time::Time(int h,int m,int s) //定義構(gòu)造函數(shù)
{
  hour=h;
  minute=m;
  sec=s;
}
void fun(Time &t)
{
  t.hour=18;
}
int main( )
{
  Time t1(10,13,56);
  fun(t1);
  cout<<t1.hour<<endl;
  return 0;
}

如果不希望在函數(shù)中修改實(shí)參t1的值,可以把引用變量t聲明為const(常引用),函數(shù)原型為

  void fun(const Time &t);


則在函數(shù)中不能改變t的值,也就是不能改變其對應(yīng)的實(shí)參t1的值。

在C++面向?qū)ο蟪绦蛟O(shè)計中,經(jīng)常用常指針和常引用作函數(shù)參數(shù)。這樣既能保證數(shù)據(jù)安全,使數(shù)據(jù)不能被隨意修改,在調(diào)用函數(shù)時又不必建立實(shí)參的拷貝。

每次調(diào)用函數(shù)建立實(shí)參的拷貝時,都要調(diào)用復(fù)制構(gòu)造函數(shù),要有時間開銷。用常指針和常引用作函數(shù)參數(shù),可以提高程序運(yùn)行效率。


C++對象的動態(tài)建立和釋放
使用類名定義的對象都是靜態(tài)的,在程序運(yùn)行過程中,對象所占的空間是不能隨時釋放的。但有時人們希望在需要用到對象時才建立對象,在不需要用該對象時就撤銷它,釋放它所占的內(nèi)存空間以供別的數(shù)據(jù)使用。這樣可提高內(nèi)存空間的利用率。

在C++中,可以使用new運(yùn)算符動態(tài)地分配內(nèi)存,用delete運(yùn)算符釋放這些內(nèi)存空間。這也適用于對象,可以用new運(yùn)算符動態(tài)建立對象,用delete運(yùn)算符撤銷對象。

如果已經(jīng)定義了一個Box類,可以用下面的方法動態(tài)地建立一個對象:

  new Box;


編譯系統(tǒng)開辟了一段內(nèi)存空間,并在此內(nèi)存空間中存放一個Box類對象,同時調(diào)用該類的構(gòu)造函數(shù),以使該對象初始化(如果已對構(gòu)造函數(shù)賦予此功能的話)。

但是此時用戶還無法訪問這個對象,因?yàn)檫@個對象既沒有對象名,用戶也不知道它的地址。這種對象稱為無名對象,它確實(shí)是存在的,但它沒有名字。

用new運(yùn)算符動態(tài)地分配內(nèi)存后,將返回一個指向新對象的指針的值,即所分配的內(nèi)存空間的起始地址。用戶可以獲得這個地址,并通過這個地址來訪問這個對象。需要定義一個指向本類的對象的指針變量來存放該地址。如

  Box *pt; //定義一個指向Box類對象的指針變量pt
  pt=new Box; //在pt中存放了新建對象的起始地址


在程序中就可以通過pt訪問這個新建的對象。如

  cout<<pt->height; //輸出該對象的height成員
  cout<<pt->volume( ); //調(diào)用該對象的volume函數(shù),計算并輸出體積

C++還允許在執(zhí)行new時,對新建立的對象進(jìn)行初始化。如

  Box *pt=new Box(12,15,18);


這種寫法是把上面兩個語句(定義指針變量和用new建立新對象)合并為一個語句,并指定初值。這樣更精煉。

新對象中的height,width和length分別獲得初值12,15,18。調(diào)用對象既可以通過對象名,也可以通過指針。

用new建立的動態(tài)對象一般是不用對象名的,是通過指針訪問的,它主要應(yīng)用于動態(tài)的數(shù)據(jù)結(jié)構(gòu),如鏈表。訪問鏈表中的結(jié)點(diǎn),并不需要通過對象名,而是在上一個結(jié)點(diǎn)中存放下一個結(jié)點(diǎn)的地址,從而由上一個結(jié)點(diǎn)找到下一個結(jié)點(diǎn),構(gòu)成鏈接的關(guān)系。

在執(zhí)行new運(yùn)算時,如果內(nèi)存量不足,無法開辟所需的內(nèi)存空間,目前大多數(shù)C++編譯系統(tǒng)都使new返回一個0指針值。只要檢測返回值是否為0,就可判斷分配內(nèi)存是否成功。

ANSI C++標(biāo)準(zhǔn)提出,在執(zhí)行new出現(xiàn)故障時,就“拋出”一個“異?!?,用戶可根據(jù)異常進(jìn)行有關(guān)處理。但C++標(biāo)準(zhǔn)仍然允許在出現(xiàn)new故障時返回0指針值。當(dāng)前,不同的編譯系統(tǒng)對new故障的處理方法是不同的。

在不再需要使用由new建立的對象時,可以用delete運(yùn)算符予以釋放。如

  delete pt; //釋放pt指向的內(nèi)存空間


這就撤銷了pt指向的對象。此后程序不能再使用該對象。

如果用一個指針變量pt先后指向不同的動態(tài)對象,應(yīng)注意指針變量的當(dāng)前指向,以免刪錯了對象。在執(zhí)行delete運(yùn)算符時,在釋放內(nèi)存空間之前,自動調(diào)用析構(gòu)函數(shù),完成有關(guān)善后清理工作。

相關(guān)文章

  • 手把手教你用C語言實(shí)現(xiàn)三子棋

    手把手教你用C語言實(shí)現(xiàn)三子棋

    三子棋是黑白棋的一種。三子棋是一種民間傳統(tǒng)游戲,又叫九宮棋、圈圈叉叉、一條龍、井字棋等。這篇文章就教你如何用C語言實(shí)現(xiàn)三子棋的功能
    2021-08-08
  • C++實(shí)現(xiàn)酒店管理系統(tǒng)

    C++實(shí)現(xiàn)酒店管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)酒店管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 分享常用的3個C++小技巧

    分享常用的3個C++小技巧

    這篇文章主要分享了常用的3個C++小技巧,
    2021-12-12
  • C++實(shí)現(xiàn)并優(yōu)化異常系統(tǒng)

    C++實(shí)現(xiàn)并優(yōu)化異常系統(tǒng)

    異常處理是C++的一項(xiàng)語言機(jī)制,用于在程序中處理異常事件,下面這篇文章主要給大家介紹了關(guān)于C++中異常的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • Qt結(jié)合OpenCV部署yolov5的實(shí)現(xiàn)

    Qt結(jié)合OpenCV部署yolov5的實(shí)現(xiàn)

    本文主要介紹了Qt結(jié)合OpenCV部署yolov5的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • C++函數(shù)指針詳解

    C++函數(shù)指針詳解

    這篇文章主要介紹了C++函數(shù)指針詳解,通過文字描述C++函數(shù)指針基礎(chǔ)概念,內(nèi)涵詳細(xì)的代碼實(shí)現(xiàn)和解析,希望對你能夠有所幫助
    2021-06-06
  • C++生成格式化的標(biāo)準(zhǔn)字符串實(shí)例代碼

    C++生成格式化的標(biāo)準(zhǔn)字符串實(shí)例代碼

    這篇文章主要給大家介紹了關(guān)于C++生成格式化的標(biāo)準(zhǔn)字符串的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用C++具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • C語言之單鏈表的插入、刪除與查找

    C語言之單鏈表的插入、刪除與查找

    本篇文章主要介紹了從單鏈表的創(chuàng)建、遍歷到節(jié)點(diǎn)的插入、刪除與查找功能的實(shí)現(xiàn),有需要的朋友可以參考下
    2015-07-07
  • VC中CWinThread類以及和createthread API的區(qū)別分析

    VC中CWinThread類以及和createthread API的區(qū)別分析

    這篇文章主要介紹了VC中CWinThread類以及和createthread API的區(qū)別分析,較為詳細(xì)的講述了CWinThread類的原理,并以實(shí)例形式對AfxBeginThread函數(shù)的內(nèi)部實(shí)現(xiàn)進(jìn)行了解釋說明,需要的朋友可以參考下
    2014-10-10
  • C++實(shí)現(xiàn)中綴表達(dá)式轉(zhuǎn)后綴表達(dá)式

    C++實(shí)現(xiàn)中綴表達(dá)式轉(zhuǎn)后綴表達(dá)式

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)中綴表達(dá)式轉(zhuǎn)后綴表達(dá)式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04

最新評論

瑞丽市| 吉首市| 清苑县| 庄浪县| 阿坝县| 云浮市| 于田县| 昌宁县| 仪征市| 永安市| 奉化市| 阳泉市| 花莲市| 曲麻莱县| 定西市| 永州市| 芦溪县| 开鲁县| 乌恰县| 汶上县| 吴桥县| 资阳市| 云和县| 吴堡县| 长泰县| 漾濞| 资阳市| 花莲市| 买车| 五大连池市| 洱源县| 大埔县| 寿阳县| 江永县| 湘乡市| 志丹县| 灵台县| 甘孜县| 陇川县| 兴文县| 迭部县|