tailieunhanh - LẬP TRÌNH C nâng cao -BÀI 14 - DESTRUCTOR, CONSTRUCTOR, CONVERSION VÀ DEBUG part 1

BÀI 14: DESTRUCTOR, CONSTRUCTOR, CONVERSION VÀ DEBUG Hàm hủy ảo (virtual destructor) Trong ví dụ sau, hàm hủy của Derived sẽ không được gọi CODE class Base{ public:Base(){};~Base(){};}; class Derived:public Base{ public:Derived(){};~Derived(){};}; int main(){ Base* b = new Derived();delete b; } . | LẬP TRÌNH C C NÂNG CAO Yêu cầu trước khi đọc học xong Lập trình C C căn bản BÀI 14 DESTRUCTOR CONSTRUCTOR CONVERSION VÀ DEBUG Hàm hủy ảo virtual destructor Trong ví dụ sau hàm hủy của Derived sẽ không được gọi CODE class Base public Base Base class Derived public Base public Derived Derived int main Base b new Derived delete b Trong trường hợp này ta cần khai báo hàm hủy của Base là hàm hủy ảo tuyệt đối không được là pure virtual destructor CODE class Base public Base virtual Base Hàm khởi tạo chuyển kiểu conversion constructor Bất kì một constructor một đối số nào đều có thể trở thành một conversion constructor CODE class Thing int num public Thing int num this .num num friend ostream operator ostream os const Thing t os void display const Thing t cout t endl int main display 7 Hàm display sẽ kiểm tra lớp Thing sau đó dùng Thing int num làm conversion constructor để gọi Thing t 7 display t Nếu chúng ta muốn constructor không bị dùng làm conversion constructor nữa thì chỉ việc thêm từ khóa explicit vào khai báo nguyên mẫu của nó CODE explicit Thing int num . Thứ tự khởi tạo đối số của constructor constructor sẽ chỉ khởi tạo giá trị cho những đối số của nó theo đúng thứ tự chúng được khai báo trong lớp chứ không phải theo CODE class Thing int total part1 part2 Thing int a int b part1 a part2 b total part1 part2 total sẽ là biến dược constructor khởi tạo giá trị trước tiên vì trong lớp nó được khai báo trước tiên và lúc này part1 và part2 đều chưa có giá trị vì chưa được khởi tạo nên phép cộng part1 part2 lập tức sẽ tạo ra lỗi chương trình Hàm chuyển kiểu conversion function Hàm chuyển kiểu là loại hàm một lớp có chức năng tự động chuyển một object của lớp đó thành một kiểu dữ liệu -phải là hàm thành viên không có tham số -kiểu trả về không nên là void không có ý nghĩa gì nữa -có khai báo operator CODE class ViDu char s int x y public ViDu char s int x int y s s x x y y operator char return s operator int return x y operator ViDu int operator int i return i int

TỪ KHÓA LIÊN QUAN