C 虛析構和(2)找出陣列中唯一的重複元素

2021-09-19 06:42:09 字數 1213 閱讀 4911

虛析構主要為了實現類多型之間層層虛構,減少記憶體洩漏。

如果不用虛析構,**如下:

#include

using namespace std;

class b

~b()

};class a :public b

~a()

};int main()

執行結果如下:

a的析構函式的沒有走到,從而導致了a的自己的變數記憶體洩漏。

加上虛析構

#include

using namespace std;

class b

virtual ~b()

};class a :public b

~a()

};int main()

執行結果如下:

這樣就會執行a的析構函式。

(2)找出陣列中唯一重複的元素。

intarr[101],存滿了1-100,其中有乙個數字是重複的的。請找出來。

(1)我們可以定義乙個map。找到重複的直接返回,但是map占用空間。

(2)我們可以求出陣列的和,減去1-100的和,就是重複的數字。

(3)我們可以用可以用陣列的下標和元素之間的關係。取乙個位置的陣列值,index=intarr[length-1]-1(其他位置元素容易出問題),我們把intarr[index]的值(-1)。然後index=intarr[index](-1)-1;直到找到intarr[index]為負值,返回index+1即可。**如下:

#include

using namespace std;

int getunique(int intarr, int length)

intarr[index] *= -1;

index = intarr[index] * (-1) - 1;

}return index + 1;

}int main()

;cout << getunique(intarr, 10) << endl;

system(「pause」);

return 0;

}第三種方法也有很多種的推廣,需要多多使用啊。

C 中的虛析構

首先什麼是虛析構,虛析構就是析構函式為虛函式。那麼為什麼要用虛析構呢,是為了delete基類指標指向派生類時防止子類得資料不會被釋放造成記憶體洩露。我們看一下下面的例子 首先我們定義乙個資料類,mydata class mydata mydata private char m data nullpt...

虛析構函式和析構函式中的虛機制

虛析構函式 虛析構函式是為了解決基類指標指向派生類物件,並用基類指標刪除派生類物件時能夠完全釋放記憶體。class a1 class a2 class b1 public a1 class b2 public a2 int main 一般來說,如果類中不包含虛函式,就表示這個類不作為基類使用。如果宣...

c 的虛析構函式和純虛析構函式

虛函式是用作實現子類的多型性的,它可以在執行的過程中選擇子類或者父類的同名函式,意思就是說,每次只有乙個函式執行。但是對於析構函式來說,子類 與父類在銷毀物件時,都應該要呼叫 所以把父類的析構函式定義為虛函式,會發生什麼事情呢。class class b public a int main 可以發現...