C 物件陣列與this指標

2021-07-22 09:04:53 字數 2638 閱讀 4160

標籤(空格分隔): c++

版本:2
該文章僅被發布於作業部落(原) 、 csdn

由於在c++中我們可以直接操作堆和棧,所以在宣告時我們也需要選擇陣列的建立方式。有一種最顯而易見的方法去判斷變數的儲存狀態,就是看物件建立時有沒有用new關鍵字。

1,棧陣列棧物件

顧名思義就是陣列和物件都在當前棧中分配,帶來的好處就是物件陣列的生命週期有限,我們不需要去手動釋放棧中的記憶體,但是缺點就是建立的物件我們只能在當前棧幀中使用,不能直接將引用返回到其他棧幀。

student stu[3]=;
當stu的生命週期終結時,其中所有物件的析構函式都將會被呼叫。

2,棧陣列和堆物件

有時我們需要將分散在堆中資料進行彙總操作,這時就可以使用這種方式建立乙個指標陣列

student *students[3]=;
當students生命週期結束時,這個陣列將會被銷毀並清空其中的引用。但其中的student物件仍在堆中存在,並且此時沒有任何指標指向這些記憶體,長此以往將會導致記憶體洩漏。

在c++中,this是乙個指標常量,指向當前正在呼叫這個方法的物件。

stu[1].show();
如果在show方法中使用了this指標,則這個this指標就代指stu[1]物件。

我們以乙個學生列表查詢最好成績的例子來演示本節內容,首先仍然是建立乙個標頭檔案student.h

-- student class inte***ce

//version 00

#ifndef student_h_

#define student_h_

#include

class

student

public:

student();

student(std::string name,int chscore,int enscore,int mathscore);

~student();

student & max1(student & stu);

student * max2(student * stu);

void show();

};#endif

然後我們去實現student.cpp,注意,這裡我們提供了為上述兩種陣列的建立方式提供了比較的辦法,在max中,我們向乙個物件傳遞了另乙個物件的引用,當我們進行判斷之後選擇是返回自身物件的引用(this)或者是引數物件的引用。

-- implementing the student class

//version 00

#include "stdafx.h"

#include "student.h"

student::student(){}

student::student(std::string n,int chscore,int enscore,int mathscore):name(n),ch(chscore),en(enscore),math(mathscore)

student::~student()

student* student::max2(student * stu)

void student::show()

我們在main方法中實現**

//visual studio 2010 -- main program

#include "stdafx.h"

#include "student.h"

void fun1();

void fun2();

int _tmain(int argc, _tchar* argv)

void fun1();

student max = students[0];

for(int i=1;i<3;i++)

max.show();

}void fun2();

student * max = * students;

for(int i=1;i<3;i++)

max->show();

for(int i=0;i<3;i++)

}

以下是**執行結果

再見! jack.

再見! sue.

再見! sam.

sue 同學的語文成績為92分,數學成績為100分,英語成績為95分,平均成績95.7分

再見! sue.

再見! sam.

再見! sue.

再見! jack.

sue 同學的語文成績為92分,數學成績為100分,英語成績為95分,平均成績95.7分

再見! jack.

再見! sue.

再見! sam.

請按任意鍵繼續…

從結果中我們可以看出,當我們使用fun1()中棧物件的時候建立並銷毀了3個臨時物件。對於大量的資料,建立物件和內容複製的時間浪費是相當大的。對於fun2()來說當我們建立物件成功後,並不需要去賦值內容,而僅僅是將引用傳遞給陣列儲存即可。但是要注意的是,堆中分配的資料一定要**記憶體。

C 之物件陣列與物件指標

是指每乙個陣列元素都是物件的陣列,也就是說,若乙個類有若干個物件,我們把一系列的物件用乙個陣列來存放。物件陣列的元素是物件,不僅具有資料成員,而且還有函式成員。格式 類名 陣列名 下標表示式 在建立陣列時,同樣要呼叫建構函式。有幾個陣列元素就要呼叫幾次建構函式。1 當只需要乙個引數時,在定義物件陣列...

bool指標 如何賦值 C 物件陣列與物件指標

所謂物件陣列是指每一陣列元素都是物件的陣列,也就是說,若乙個類有若干個物件,則把這一系列的物件用乙個陣列來存放。物件陣列的元素是物件,不僅具有資料成員,而且還有函式成員 定義乙個一維陣列的格式如下 類名 陣列名 下標表示式 exam ob 4 定義了類exam的物件陣列ob.與基本資料型別的陣列一樣...

C 物件指標與物件陣列(拉丁舞)

怡山小學畢業文藝晚會上,拉丁舞是最受歡迎的節目。不過,每年為了排練這個節目,舞蹈組都會出現一些糾紛。有些同學特別受歡迎,有些卻少人問津,因此安排舞伴成為舞蹈組陳老師最頭疼的問題。為了解決這一問題,今年陳老師決定讓按先男生後女生,先低號後高號的順序,每個人先報上自己期待的舞伴,每人報兩位,先報最期待的...