Chủ đề: Về kế thừa
-
12-06-2014, 12:07 PM #1
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Về kế thừa
Chào các bạn, hôm nay mình đọc sách, thấy có 1 cái code mà không biết nó hiện kết quả ra màn hình như thế nào nên chạy thử. Mình được kết quả:
Mã:A ctor C ctor A ctor B ctor D ctor
Mã:#include <iostream> class A{public: A(); ~A();}; A::A(){ std::cout << "A ctor ";} A::~A(){ std::cout << "A dtor ";}class B : public A{public: B(); ~B();}; B::B(){ std::cout << "B ctor ";} B::~B(){ std::cout << "B dtor ";}class C{public: C(); ~C();private: A a;}; C::C(){ std::cout << "C ctor ";} C::~C(){ std::cout << "C dtor ";}class D : public C{public: D(); ~D();private: B b;}; D::D(){ std::cout << "D ctor ";} D::~D(){ std::cout << "D dtor ";}void main() { D d; system("pause");}
View more random threads:
- Thắc mắc con trỏ xâu
- Lỗi .exe has stoped working trên c-free
- Khai báo struct trên C++ như thế nào?
- hàm strdup. Cho em hỏi bị lỗi gì vậy?
- Danh sách liên kết..
- [Mảng] - Xây dựng menu
- Mọi người giải thích dùm về đoạn code về chuỗi ló tự có dùng struct với!!!!!!!!!
- khai bao biến flag, flag trong giải hệ pt n ẩn
- làm thế nào để vẽ được đồ thị phẳng sau khi đọc một ma trận kề từ file txt ?
- có ai có cách tính nhanh and or xor not ko ạ !
-
12-06-2014, 12:51 PM #2
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Khi class A kế thừa class B, nếu bạn khởi tạo 1 biến của B nó sẽ chạy hàm khởi tạo của lớp cha trước rồi mới chạy hàm khởi tạo lớp con. viết D d; =>thì nó cấp 1 vùng nhớ cho biến d và chạy hàm tạo của D. Do quan hệ kế thừa nên hàm tạo của D gọi hàm tạo của C, hàm tạo của C gọi hàm tạo của B .... => kết quả thì như bạn thấy đó. Ko có lời gọi hàm tường minh đâu, mấy hàm hủy và tạo là như vậy đó .
-
12-06-2014, 03:35 PM #3
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Mặc dù đã hiểu là vậy nhưng bạn có thể giải thích kĩ cho mình được không?
Với lại khi mình gọi
Mã:d.~D()
Mã:D dtor B dtor A dtor C dtor A dtor
-
12-06-2014, 04:19 PM #4
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
D kế thừa từ C
D có chứa B
C có chứa A
B kế thừa từ A
khởi tạo D thì base class sẽ được khởi tạo trước, rồi mới tới mấy biến của D, rồi mới vào thân hàm của ctor.
như vậy theo thứ tự thì:
D() = C() -> B() -> D
khi khởi tạo C, cũng theo thứ tự base class -> biến -> thân hàm của C(). Vì C ko có base class (ký hiệu là ...) mà chỉ có biến C nên thứ tự là
C() = ... -> A() -> C = A() -> C
khi khởi tạo B, cũng theo thứ tự base class -> biến -> thân hàm của B(). Vì B ko có biến mà chỉ có base class là A nên
B() = A() -> ... -> B = A() -> B
khi khởi tạo A, cũng theo thứ tự base class -> biến -> thân hàm của A(). Vì A ko có biến và ko có base class nên
A() = A
thế vào là ra
D() = A -> C -> A -> B -> D
*: dtor là ngược lại với ctor. Viết được trình tự ctor rồi chỉ cần đảo lại là ra trình tự dtor:
~D() = D -> B -> A -> C -> A
-
13-06-2014, 03:02 PM #5
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi INTP
xã hội vững mạnh, nhu cầu mặc đẹp của con người ngày càng cao. ngành công nghiệp thời trang cũng đang vững mạnh chóng vánh. những nhà máy gia công hàng may mặc chẳng thể đóng góp lặng thầm vào sự...
Tìm xưởng may gia công tại TP Hồ...