Upload
everly
View
50
Download
0
Embed Size (px)
DESCRIPTION
高等程式語言實習課. http://helldeathscythe.myweb.hinet.net/. Constructor and Destructor. Constructor 建構子 物件生成時設定初值 沒有回傳值 必須被宣告成 public 類似 int x=10; => int x(10);. Constructor and Destructor. frac. - PowerPoint PPT Presentation
Citation preview
高等程式語言實習課高等程式語言實習課
http://helldeathscythe.myweb.hinet.net/http://helldeathscythe.myweb.hinet.net/
Constructor and Constructor and DestructorDestructor
Constructor Constructor 建構子建構子– 物件生成時設定初值物件生成時設定初值– 沒有回傳值沒有回傳值– 必須被宣告成必須被宣告成 publicpublic– 類似類似 int x=10; => int x(10);int x=10; => int x(10);
Constructor and Constructor and DestructorDestructor
fracfracclass frac{public:
int up; // 分子int down; // 分母int gcd(int x, int y);// 約分時呼叫用void setfrac(int u,int d); // 設定分數void reduce(); // 約分void print(string msg); // 印出分數frac frac_add(const frac &f); // 分數加法frac frac_div(const frac &f); // 分數除法
};
Constructor and Constructor and DestructorDestructor
fracfracvoid main()
{
frac a;a.setfrac(28,-35);a.print("a="); // 印出 f=-15/20
frac b;
b.setfrac(21,24);
frac c;
c.setfrac(27,-36);}
使用建構子呢使用建構子呢 ??
Constructor and Constructor and DestructorDestructor
fracfracvoid main()
{
frac a(28,-35);a.print("a="); // 印出 f=-15/20
frac b(21,24);
frac c(27,-36);
}
Constructor and Constructor and DestructorDestructor
建構子的種類建構子的種類– Default Default constructor (constructor ( 沒有參數的建構子沒有參數的建構子 ))– Copy Copy Constructor (Constructor ( 參數是自己的建構子參數是自己的建構子 ))– Conversion Constructor (Conversion Constructor ( 有參數的建構子有參數的建構子 ))
Constructor and Constructor and DestructorDestructor
Conversion Constructor (Conversion Constructor ( 有參數的建構子有參數的建構子 ))class frac{public:
int up; // 分子int down; // 分母frac(int u,int d):up(u),down(d) {}
};
frac(int u,int d)
{
up=u;
down=d;
}當你傳遞的物件 沒有實作” =” 時 使用 constructor 傳遞物件 !!!
Constructor and Constructor and DestructorDestructor
Default Default constructor (constructor ( 沒有參數的建構子沒有參數的建構子 ))class frac{public:
int up; // 分子int down; // 分母frac()
{
up=0;
down=1;
}};
Constructor and Constructor and DestructorDestructor
Copy Copy Constructor (Constructor ( 參數是自己的建構子參數是自己的建構子 ))class frac{public:
int up; // 分子int down; // 分母frac(const frac &f)
{
up=f.up;
down=f.down;
}};
Constructor and Constructor and DestructorDestructor
這是什麼建構子這是什麼建構子 ??class frac{public:
int up; // 分子int down; // 分母frac(int n)
{
up=n;
down=1;
}};
Constructor and Constructor and DestructorDestructor
建構子的使用時機建構子的使用時機– 物件產生時物件產生時
Constructor and Constructor and DestructorDestructor 請問以下程式被執行時,會執行哪些請問以下程式被執行時,會執行哪些 ConstructorConstructor
int main(){
frac *f1, *f2, *f3, *f4;
f1 = new frac ; p1-> print ();
f2 = new frac (3); p2-> print ();
f3 = new frac (3,5); p3-> print ();
f4 = new frac (f3);p4-> print ();
}
Constructor and Constructor and DestructorDestructor 請問以下程式被執行時,會執行哪些請問以下程式被執行時,會執行哪些 ConstructorConstructor
frac frac_add(frac a,frac b){
frac rlt(a.up*b.down+b.up*a.down,a.down*b.down);return rlt;
}int main(){
frac a(3,4);
frac b(1,4);
frac c = frac_add(a,b);
}
物件生成 !!!
Constructor and Constructor and DestructorDestructor
如果如果 Copy Copy ConstructorConstructor 這樣寫這樣寫,,結果如何結果如何 ??class frac{public:
int up; // 分子int down; // 分母frac(frac f)
{
up=f.up;
down=f.down;
}};
Constructor and Constructor and DestructorDestructor 請問以下程式被執行時,會執行哪些請問以下程式被執行時,會執行哪些 ConstructorConstructor
int main(){
frac *f;
f = new frac[10];
}
Constructor and Constructor and DestructorDestructor
Destructor Destructor 解構子解構子– 當物件被消滅時執行當物件被消滅時執行– 沒有回傳值 不允許傳遞參數沒有回傳值 不允許傳遞參數– 必須被宣告成必須被宣告成 publicpublic
Constructor and Constructor and DestructorDestructor
Destructor Destructor 解構子解構子– 當你的物件中含有指標時,一定要寫解構當你的物件中含有指標時,一定要寫解構
子子 當物件含有指標時,一定要寫當物件含有指標時,一定要寫
– Copy Copy ConstructorConstructor– Operator =()Operator =()– DestructorDestructor
Constructor and Constructor and DestructorDestructor
萬年考題萬年考題– 請寫出以下程式執行時物件的生成與消滅順序請寫出以下程式執行時物件的生成與消滅順序
void fun1() { xstr s1; }
void fun2(xstr s3) {}
xstr fun3() { xstr s4; retrun s4;}
void main(){
xstr s;
fun1();
fun2();
s = fun3(); }