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 Destructors
Tấ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àmDestructor
nế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ưb
hoặc cast “âm thầm” (implicit) nhưc
cũ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à
float
chứ ko phảidouble
. C++ mặc định số thực làdouble
hế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
constructor
k 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ìfract
làfraction
được khởi tạo mà ko có tham số => cần default ctor.