您好,登錄后才能下訂單哦!
//C++程序結構
//main.cpp 包含主函數的程序文件
//.h文件用戶自定義的各種類的頭文件,建議一個.h文件中只說明一種類。
//.cpp 用戶自定義各種類的實現(xiàn)文件。
//構造函數是一種能夠自定初始化對象的特殊成員函數。
//構造函數是和類同名的成員函數
接下來,我們定義一個Clock類
Clock.h:
#include <iostream> class Clock { public: private: int m_Second; int m_Minute; int m_Hour; public: //Clock();就是構造函數 Clock(); void PrintTimes(); }; #endif /* defined(__C1__Clock__) */
Clock.cpp:
#include "Clock.h" using namespace std; Clock::Clock() { std::cout<<"調用了構造函數"<<endl; m_Hour = 0; m_Minute = 0; m_Second = 0; } void Clock::PrintTimes() { std::cout<<m_Hour<<":"<<m_Minute<<":"<<m_Second<<endl; }
接下來是main函數:
int main(int argc, const char * argv[]) { //當程序執(zhí)行到下一行語句時,程序為對象clockVar分配內存控件,然后調用不帶參數的構造函數來初始化對象的成員變量, Clock clockVar; //最后程序調用成員函數PrintTimes clockVar.PrintTimes(); return 0; }
代碼例子: "構造函數和析構函數.zip" http://vdisk.weibo.com/s/G9afa
這樣,我們就對構造函數有了一個初步的認識。接下來我們繼續(xù)學習構造函數和運算符new
我們繼續(xù)使用之前的例子。main函數如下
int main(int argc, const char * argv[]) { //當使用new創(chuàng)建一個動態(tài)對象時,new首先分配足以保存Clock類的一個對象所需的內存空間,然后自動調用構造函數來進行初始化這塊內存,最后返回這個對象的地址。 cout<<"In main()"<<endl; Clock* pObj = new Clock(); cout<<"Object array"<<endl; Clock* pArray = new Clock[5]; //當使用new創(chuàng)建一個對象或數組時,在使用完后需要用delete進行空間的釋放。 delete pObj; //delete [] 用來釋放創(chuàng)建的數組對象 delete [] pArray; return 0; }
代碼下載地址: http://vdisk.weibo.com/s/G9jqI
接下來,我們繼續(xù)學習帶參數的構造函數
Clock.h文件內容如下:
#include <iostream> class Clock { public: private: int m_Second; int m_Minute; int m_Hour; public: //帶參數的構造函數 下面的參數可以省略,也可以前后不一致,仔細對比一下就可以發(fā)現(xiàn)。 Clock(int =0,int = 0,int b=0); }; #endif /* defined(__C1__Clock__) */
Clock.cpp如下:
using namespace std; Clock::Clock(int _iSecond,int _iMinute,int _iHour) { cout<<"初始化"<<_iHour<<":"<<_iMinute<<":"<<_iSecond<<endl; m_Second = _iSecond; m_Minute = _iMinute; m_Hour = _iHour; }
main函數如下:
cout<<"開始"<<endl; Clock clockA; Clock clockB(10,20,21);
代碼下載地址: http://vdisk.weibo.com/s/GaSKY
我們繼續(xù)學習重載構造函數:
Clock.h文件如下:
#include <iostream> class Clock { private: int m_Second; int m_Minute; int m_Hour; public: //Clock();就是構造函數 Clock(); //函數重載就是方法名相同但參數不同,因此就是不同的方法。之間沒有其他的關系除了名字相同以外 Clock(int,int,int); }; #endif /* defined(__C1__Clock__) */
Clock.cpp文件如下:
Clock::Clock() { std::cout<<"初始化:調用了不帶參數的構造函數 "<<endl; m_Hour = 0; m_Minute = 0; m_Second = 0; } Clock::Clock(int _iSecond,int _iMinute,int _iHour) { cout<<"初始化:調用了帶參數的構造函數"<<_iHour<<":"<<_iMinute<<":"<<_iSecond<<endl; m_Second = _iSecond; m_Minute = _iMinute; m_Hour = _iHour; }
main函數如下:
Clock clockA; Clock clockB(12,23,43);
代碼下載地址:http://pan.baidu.com/share/link?shareid=2813300908&uk=3189484501
我們來學習析構函數:
//析構函數的作用:用于在對象注銷時執(zhí)行一些清理工作。
//注意:調用析構函數的順序,是和構造函數的順序相反的,即先建立的對象最后被析構。
Clock.h文件如下:
#include <iostream> class Clock { private: int m_Second; int m_Minute; int m_Hour; public: //Clock();就是構造函數 Clock(); //~Clock();就是析構函數 ~Clock(); //函數重載就是方法名相同但參數不同,因此就是不同的方法。之間沒有其他的關系除了名字相同以外 Clock(int,int,int); }; #endif /* defined(__C1__Clock__) */
Clock.cpp文件如下:
#include "Clock.h" using namespace std; Clock::Clock() { std::cout<<"初始化:調用了不帶參數的構造函數 "<<endl; m_Hour = 0; m_Minute = 0; m_Second = 0; } Clock::~Clock() { cout<<"析構函數:"<<m_Hour<<":"<<m_Minute<<":"<<m_Second<<endl; } Clock::Clock(int _iSecond,int _iMinute,int _iHour) { cout<<"初始化:調用了帶參數的構造函數"<<_iHour<<":"<<_iMinute<<":"<<_iSecond<<endl; m_Second = _iSecond; m_Minute = _iMinute; m_Hour = _iHour; }
main函數:
//析構函數的作用:用于在對象注銷時執(zhí)行一些清理工作。 //注意:調用析構函數的順序,是和構造函數的順序相反的,即先建立的對象最后被析構。 int main(int argc, const char * argv[]) { Clock clockA; Clock clockB(12,23,43); return 0; }
//Clock clockA; 這種初始化的方式就是直接聲明一個Clock類的對象。它會自動調用析構方法。
代碼下載地址: http://pan.baidu.com/share/link?shareid=2927544745&uk=3189484501
接下來們學習 析構函數和delete
Clock.h
#include <iostream> class Clock { private: int m_Second; int m_Minute; int m_Hour; public: //Clock();就是構造函數 Clock(); ~Clock(); //函數重載就是方法名相同但參數不同,因此就是不同的方法。之間沒有其他的關系除了名字相同以外 Clock(int,int,int); };
Clock.cpp
#include "Clock.h" using namespace std; Clock::Clock() { std::cout<<"初始化:調用了不帶參數的構造函數 "<<endl; m_Hour = 0; m_Minute = 0; m_Second = 0; } Clock::~Clock() { cout<<"析構函數:"<<m_Hour<<":"<<m_Minute<<":"<<m_Second<<endl; } Clock::Clock(int _iSecond,int _iMinute,int _iHour) { cout<<"初始化:調用了帶參數的構造函數"<<_iHour<<":"<<_iMinute<<":"<<_iSecond<<endl; m_Second = _iSecond; m_Minute = _iMinute; m_Hour = _iHour; }
main函數
int main(int argc, const char * argv[]) { //指針需要手動調用delete方法,才能將內存釋放。 Clock* clockA = new Clock(10,4,12); Clock* clockB = new Clock[4]; Clock tempA; //指針相對于類型對象的優(yōu)勢,在于占用內存的空間上。 cout<<"指針占用的內存空間"<<sizeof(clockA)<<endl; cout<<"類型對象占用的內存空間"<<sizeof(tempA)<<endl; delete clockA; delete [] clockB; return 0; }
代碼下載地址:http://pan.baidu.com/share/link?shareid=752461709&uk=3189484501
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。