標籤(空格分隔): 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.從結果中我們可以看出,當我們使用fun1()中棧物件的時候建立並銷毀了3個臨時物件。對於大量的資料,建立物件和內容複製的時間浪費是相當大的。對於fun2()來說當我們建立物件成功後,並不需要去賦值內容,而僅僅是將引用傳遞給陣列儲存即可。但是要注意的是,堆中分配的資料一定要**記憶體。再見! sue.
再見! sam.
sue 同學的語文成績為92分,數學成績為100分,英語成績為95分,平均成績95.7分
再見! sue.
再見! sam.
再見! sue.
再見! jack.
sue 同學的語文成績為92分,數學成績為100分,英語成績為95分,平均成績95.7分
再見! jack.
再見! sue.
再見! sam.
請按任意鍵繼續…
C 之物件陣列與物件指標
是指每乙個陣列元素都是物件的陣列,也就是說,若乙個類有若干個物件,我們把一系列的物件用乙個陣列來存放。物件陣列的元素是物件,不僅具有資料成員,而且還有函式成員。格式 類名 陣列名 下標表示式 在建立陣列時,同樣要呼叫建構函式。有幾個陣列元素就要呼叫幾次建構函式。1 當只需要乙個引數時,在定義物件陣列...
bool指標 如何賦值 C 物件陣列與物件指標
所謂物件陣列是指每一陣列元素都是物件的陣列,也就是說,若乙個類有若干個物件,則把這一系列的物件用乙個陣列來存放。物件陣列的元素是物件,不僅具有資料成員,而且還有函式成員 定義乙個一維陣列的格式如下 類名 陣列名 下標表示式 exam ob 4 定義了類exam的物件陣列ob.與基本資料型別的陣列一樣...
C 物件指標與物件陣列(拉丁舞)
怡山小學畢業文藝晚會上,拉丁舞是最受歡迎的節目。不過,每年為了排練這個節目,舞蹈組都會出現一些糾紛。有些同學特別受歡迎,有些卻少人問津,因此安排舞伴成為舞蹈組陳老師最頭疼的問題。為了解決這一問題,今年陳老師決定讓按先男生後女生,先低號後高號的順序,每個人先報上自己期待的舞伴,每人報兩位,先報最期待的...