01/10/2018, 01:00
Destructor ở lớp dẫn xuất trong kế thừa c++?
chào các bạn
trong phần kế thừa ở c++
hàm khởi tạo lớp cở sở sẽ chạy trước hàm khởi tạo lớp dẫn xuất
còn hàm hủy thì ngược lại, thì định nghĩa như thế nào nhỉ?
xin cam ơn
#include <iostream>
using namespace std;
class day{
protected:
int ngay;
public:
day(int ngay = 1){
this->ngay = ngay;
}
~day(){
}
day(const day &n){
this->ngay = n.ngay;
}
void output(){
cout << "Ngay " << ngay << endl;
}
};
class month : public day{
private:
int thang;
public:
month(int ngay = 1, int thang = 1) : day(ngay){
this->thang = thang;
}
~month() : ~day(){ // here?
}
};
int main(){
system("pause");
return 0;
}
Bài liên quan
bạn không cần định nghĩa gì trong class kế thừa trừ khi muốn thay đổi thuộc tính nào đó, hàm dựng và hàm hũy sẽ được gọi tự động. Bạn debug từng bước sẽ thấy nó chạy như thế nào.
ví dụ giờ chương trình mình có con trỏ như thế này, ở trên là mình lười viết , biến thường thì bộ thu gom sẽ tự dọn dẹp, nhưng con trỏ thì hàm hủy phải chạy chứ nhỉ
@kiencon
tất nhiên, mình nói đơn giản thế này, trong class có con trỏ thì hàm hủy của nó phải giải phóng con trỏ đó, giải phóng trước hay sau giữa các class cơ sở và kế thừa thì tùy ngôn ngữ. Như ví dụ bạn đưa thì nó đã được giải phóng toàn bộ rồi.
nghĩa là ở class dẫn xuất, muốn dùng hàm khởi tạo của class cở sở thì phải gọi
còn muốn dùng hàm hủy của class cơ sở thì k cần phải gọi gì cả hả bạn?
mình có nói ở trên, là hàm hủy và hàm dựng đều được gọi tự động khi đối tượng được tạo ra, bạn không cần phải gọi trong lớp kế thừa trừ khi bạn muốn thay đổi thuộc tính của lớp cơ sở qua hàm set ở lớp cơ sở, ở đây hàm set phải được khai báo là hàm ảo để sử dụng được ở lớp kế thừa bằng từ khóa vitural
Hi Nấm Lùnhell6w9rld.
Mình hơi tò mò sao bạn lại kế thừ tháng từ ngày vây ?
mình lấy ví dụ đại để nói cái destructor thôi
bạn delete luôn biến ngày ở lớp cơ sở thì lớp kế thừa bạn ko sử dụng được biến ngày nữa rồi vì nó đã được giải phóng mất luôn sau khi lớp cơ sở thực hiện xong rồi.