30/09/2018, 17:24
Chưa Hiểu Destructors và Constructor
#include<iostream>
#include<string>
using std::cout;
using std::endl;
using std::string;
class Person{
public:
Person(){
cout << "Person()"<<endl;
}
~Person(){
cout << "~Person()" << endl;
}
};
void main(){
cout << "befor the scoped block" << endl;
// {
// Person person;
// }
//Như này thì nó Chạy hàm Destructor nhưng e bỏ dấu {} đi thì nó k chạy hàm ~Person. Tại sao vậy!
cout << "After the scoped block"<<endl;
}
Bài liên quan





do hàm destructor được gọi sau khi thoát khỏi scope. scope chính là vùng nằm giữa 2 ngoặc {} này.
nhưng sao mình xem thì k cần
{} cũng gọi được hàm DestructorsTất nhiên bạn vẫn gọi được hàm Destructor mọi lúc, nhưng theo mình biết thì chỉ khi nào ra khỏi scope của nó thì nó mới bắt đầu thực hiện destructor.
đây nè bạn
? thì sao bạn
do scope của person ở trường hợp này chính là hàm main, nên sau khi thoát hàm main nó mới destructor (in “After…” trước “~person”)
nhưng sao máy mình k hiện ra như thế nhỉ
Máy bạn hiện ra như thế nào. Mình test ở cả 2 trường hợp đều gọi được destructor, riêng ở trường hợp scope là main thì hơi khó do chương trình thoát lập tức nhưng nếu chạy trên powershell thì vẫn được.
powerShell là gì vậy. Chắc do mình cho dừng ở
{ }nên nó k hiện được hàmDestructornếu bỏ dấu { } đi thì p tồn tại đến hết chương trình, tức là sau dấu } của main() thì nó mới được hủy
Có nghĩa là gì vậy
là hàm chuyển PhanSo sang float. Viết hàm này thì có thể gọi
nếu ko có hàm trên thì ko gọi
float(a)được. Có hàm operator float() thì cast “tường minh” (explicit) nhưbhoặc cast “âm thầm” (implicit) nhưccũng được.nhân với 1.0f là để chuyển numerator thành float, chứ int / int thì ra int, vd 7 / 3 thì ra 2 chứ ko phải 2.3333…, phải cast số 7 hoặc/và số 3 thành float thì mới ra 2.3333… được. Chữ f sau 1.0 là để cho trình dịch biết số 1.0 này là
floatchứ ko phảidouble. C++ mặc định số thực làdoublehết.đáng ra phải viết là
mới đúng cú pháp trong C++, nhưng mà dài dòng.
Cho e hỏi nốt, tại sao chỗ này phải có hàm
constructork tham sôko có cũng ko sao. Nếu có thì nên gán numerator = 0, denominator = 1 chứ chả gán cái gì thì viết default ctor làm gì.
k có chỗ hàm dựng trong hàm
main()mình gọi nó ra bị lỗinhư vậy là vì có viết ctor fraction(float) nên bắt buộc phải viết default ctor ~.~ Cái này cũng dị thiệt
mình chưa hiểu lắm tại sao mình xóa hàm dựng k có tham số bị lỗi
vì ngay dòng đầu tiên khai báo
fraction fract;thìfractlàfractionđược khởi tạo mà ko có tham số => cần default ctor.