A. c語言中,「類」中的構造函數和析構函數,樹上的解釋我看了,不明不白,求應用。
首先,類是C++中的,C語言只有結構體。當你定義了一個類類型的對象時,需要對這個對象中的數據成員初始化,這就是構造函數的作用;當這個類的對象生命周期結束時,需要釋放相關內存啊之類的,這就是析構函數的作用。具體的例子可以參考我的博客:
關於構造函數:http://blog.csdn.net/thefutureisour/article/details/7705665
關於析構函數:http://blog.csdn.net/thefutureisour/article/details/7708964
B. C 中析構函數的符號怎麼打
就鍵盤數字1前面的那個,按住 shift,再按
C. 如何用c語言實現CString的構造函數,析構函數和賦值函數
類是編程人員表達自定義數據類型的C++機制。它和C語言中的結構類似,C++類
支持數據抽象和面向對象的程序設計,從某種意義上說,也就是數據類型的設
計和實現。
那麼
String
類的原型如下
class
String
{
public:
String(const
char
*str=NULL);
//構造函數
String(const
String
&other);
//拷貝構造函數
~String(void);
//析構函數
String&
operator=(const
String
&other);
//等號操作符重載,賦值函數
ShowString();
private:
char
*m_data;
//字元指針
};
String::~String()
{
delete
[]
m_data;
//析構函數,釋放地址空間
}
String::String(const
char
*str)
{
if
(str==NULL)//當初始化串不存在的時候,為m_data申請一個空間存放'/0';
{
m_data=new
char[1];
*m_data='/0';
}
else//當初始化串存在的時候,為m_data申請同樣大小的空間存放該串;
{
int
length=strlen(str);
m_data=new
char[length+1];
strcpy(m_data,str);
}
}
String::String(const
String
&other)//拷貝構造函數,功能與構造函數類似。
{
int
length=strlen(other.m_data);
m_data=new
[length+1];
strcpy(m_data,other.m_data);
}
String&
String::operator
=(const
String
&other)
//賦值函數
{
if
(this==&other)//當地址相同時,直接返回;
return
*this;
delete
[]
m_data;//當地址不相同時,刪除原來申請的空間,重新開始構造;
int
length=sizeof(other.m_data);
m_data=new
[length+1];
strcpy(m_data,other.m_data);
return
*this;
}
String::ShowString()//由於m_data是私有成員,對象只能通過public成員函數來訪問;
{
cout<<this->m_data<<endl;
}
測試一下:
main()
{
String
AD;
char
*
p="ABCDE";
String
B(p);
AD.ShowString();
AD=B;
AD.ShowString();
}
D. c++ 析構函數 是在什麼時候執行
c++ 析構函數調用時間:
1、對象生命周期結束,被銷毀時;
2、delete指向對象的指針時,或delete指向對象的基類類型指針,而其基類虛構函數是虛函數時;
3、對象i是對象o的成員,o的析構函數被調用時,對象i的析構函數也被調用。
C++是C語言的繼承,它既可以進行C語言的過程化程序設計,又可以進行以抽象數據類型為特點的基於對象的程序設計,還可以進行以繼承和多態為特點的面向對象的程序設計。C++擅長面向對象程序設計的同時,還可以進行基於過程的程序設計,因而C++就適應的問題規模而論,大小由之。
C++不僅擁有計算機高效運行的實用性特徵,同時還致力於提高大規模程序的編程質量與程序設計語言的問題描述能力。
(4)c語言析構函數擴展閱讀:
C++語言特點:
1、支持繼承和重用
在C++現有類的基礎上可以聲明新類型,這就是繼承和重用的思想。通過繼承和重用可以更有效地組織程序結構,明確類間關系,並且充分利用已有的類來完成更復雜、深入的開發。新定義的類為子類,成為派生類。它可以從父類那裡繼承所有非私有的屬性和方法,作為自己的成員。
2、支持多態性
採用多態性為每個類指定表現行為。多態性形成由父類和它們的子類組成的一個樹型結構。在這個樹中的每個子類可以接收一個或多個具有相同名字的消息。當一個消息被這個樹中一個類的一個對象接收時,這個對象動態地決定給予子類對象的消息的某種用法。多態性的這一特性允許使用高級抽象。
繼承性和多態性的組合,可以輕易地生成一系列雖然類似但獨一無二的對象。由於繼承性,這些對象共享許多相似的特徵。由於多態性,一個對象可有獨特的表現方式,而另一個對象有另一種表現方式。
參考資料來源:網路-C++
E. C++ 析構函數
搞清楚這個問題,就要搞清楚默認析構函數的作用,是釋放類內定義的成員的內存。
C類定義了一個成員,類型是指針,C類的析構函數會釋放指針本身,即是一個指針所佔的內存。而不是指針指向的內存。其實道理跟類裡面定義一個int,會釋放一個int所佔內存一樣。
而指針指向的內存就跟這個C類一點關系沒有,至於是否釋放,需要不需要釋放,就回到了最原始的問題了:
1,區域是用new創建的,要delete
2,區域是用C c 這種形式創建的不需要。
F. c語言中的構造函數和析構函數的異同點
構造函數是一種用於創建對象的特殊函數,當創建對象是,系統自動調用構造函數,不能在程序中直接調用.
構造函數名與類名相同,一個類可以擁有多個構造函數(重載),構造函數可以有任意類型的參數,但不能具有返回類型!
構造函數的作用是:為對象分配空間;對數據成員賦初值;請求起他資源.
析構函數作用是清除對象,釋放內存等
G. 每個c 類只有一個析構函數,但可以有多個構造函數和多個賦值函數
說法正確。
析構函數是自動調用的,不存在重載的可能,所以只有一個析構。
而構造和賦值,可以根據傳入參數進行重載,所以可以有多個。
H. C/C++析構函數
析構函數的作用是對類對象進行內存回收(即聲明了該內存空間可以被其他程序使用了!),顯示調用析構函數只會執行你設計的析構函數的功能(也就是上訴括弧里的,聲明被析構成員的內存空間可以被其他程序所使用了。),但是不會真正意義上析構掉對象,要析構掉對象,只有當且僅當對象的生命周期結束時,由系統操作系統回收對象的內存!這同其他的變數一樣,當生命周期結束時,才會被回收內存空間!
另外,為什麼顯示調用析構函數後,能然可以訪問被析構了的類成員呢?(假如你的類中有個使用malloc分配空間的成員,然後析構函數中使用free掉他。)因為,free的作用是聲明該內存空間可以被其他程序所用,而不是隔斷變數地址至物理內存的映射(程序虛擬內存空間至物理內存空間的映射),即這種映射關系並不會因為free的影響而斷開,所以free後能然訪問那片內存空間,但是實際上,那片內存空間已經不是你的程序所私有的了,而是被系統標記為未分配出去的空間。
所以綜上所述,調用了析構函數後,卻能然可以訪問被析構了的成員這個假象造成了我們認為顯示調用析構函數沒用!
以上的觀點屬於個人結論,而且現在沒有機器做實驗,不知道說的是對是錯,請樓主自行斟酌。