下面我們來看乙個帶引數的建構函式是如何進行物件的始化操作的。
**如下:
#include
using
namespace std;
class teacher
void show();
protected:
char *name;
};
void teacher::show()
我們建立了乙個帶有字元指標的帶有形參的teacher(char *input_name)的建構函式,呼叫它建立物件的使用類名加物件名稱加擴號和擴號內引數的方式呼叫,這和呼叫函式有點類似,但意義也有所不同,因為建構函式是為建立物件而設立的,這裡的意義不單純是呼叫函式,而是建立乙個類物件。
一旦類中有了乙個帶引數的建構函式而又沒無引數建構函式的時候系統將無法建立不帶引數的物件,所以上面的**
teacher a;
就是錯誤的!!!
這裡還有一處也要注意:
//name=input_name;//這樣賦值是錯誤的
因為name指是指向記憶體堆區的,如果使用name=input_name;會造成指標指向改變不是指向堆區而是指向棧區,導致在後面呼叫析構函式delete釋放堆空間出錯!(析構函式的內容我們後面將要介紹)
如果需要呼叫能夠執行就需要再新增乙個沒有引數的建構函式
對上面的**改造如下:
#include
using
namespace std;
class teacher
teacher()//無引數建構函式,進行函式過載
void show();
protected:
char *name;
};
void teacher::show()
建立乙個無闡述的同名的teacher()無引數函式,一過載方式區分呼叫,由於建構函式和普通函式一樣具有過載特性所以編寫程式的人可以給乙個類新增任意多個建構函式,來使用不同的引數來進行初始話物件。
C 物件導向程式設計 建構函式
建構函式的相互呼叫又稱為 建構函式初始化器,這是c 的乙個特殊的語法 在有些時候,建構函式內包含一些共同的 為了達到 的復用性,函式初始化器很好的解決了這一問題 示例 如下 using system namespace mycsharppro private int age public perso...
python物件導向與構造構析函式
程式設計正規化 程式設計范型 程式設計正規化或程式設計法 範即模範 典範之意,正規化即模式 方法 是一類典型的程式設計風格,是指從事軟體工程的一類典型的風格 可以對照方法學 如 函式式程式設計 程式程式設計 物件導向程式設計 命令式程式設計等等為不同的程式設計范型。面向過程程式設計 面向過程 pro...
C 物件導向(二) 構造 析構函式
析構函式 destructor 構造 析構順序 建構函式 也叫構造器 在物件建立的時候回自動呼叫,一般用於完成物件的初始化工作 函式名與類同名,無返回值,可以有引數,可以過載,可以有多個建構函式 struct person person int age intmain 一旦自定義了建構函式,必須用其...