//如果不顯示定義複製建構函式,編譯會出錯,原因是:在建立物件s2時,呼叫預設複製建構函式並用物件s1對其進行初始化,致使s2中指標
//與s1中指標指向同一儲存空間,當乙個物件生命週期結束後呼叫析構函式釋放記憶體空間後,另乙個變數的指標懸空,無法正常使用。
//淺複製
//再用乙個物件初始化另乙個物件時,只複製了成員,沒有複製資源(指堆記憶體 ,資料成員沒有具體值),使兩個物件同時指向同一資源,
//如果不存在資源矛盾,程式可以正常執行
#include
#include
using namespace std;
class student
public:
student(int pid, char *pname, float s);
student(const student& init);
void display();
~student();
private:
int id;
char *name;
float score;
student::student(int pid, char * pname, float s)
id = pid;
name = new char[strlen(pname) + 1];//學會這種表達方式!!
strcpy(name,pname);
score = s;
student::student(const student & init)//理解!!
深入理解各種建構函式
include includeusing namespace std class test else test const test t else test operator const test t pdata new char strlen t.pdata 1 strcpy pdata t.pd...
C 建構函式深入理解
01 初始化引數列表.cpp include include include using namespace std struct student 拷貝建構函式定義 拷貝建構函式的有效引數,必須是該類的物件的引用 if 1 student student s,int class no 1 else ...
深入理解js建構函式
在j ascript中,建立物件的方式包括兩種 物件字面量和使用new表示式。1.1物件字面量是一種靈活方便的書寫方式,例如 var o1 這樣,就用物件字面量建立了乙個物件o1,它具有乙個成員變數p以及乙個成員方法alertp。這種寫法的缺點是 每建立乙個新的物件都需要寫出完整的定義語句,不便於建...