LẬPTRÌNH C/C++ NÂNGCAO Yêu cầu trước khi đọc: học xong Lậptrình C/C++ căn bản BÀI 3: NHẮCLẠIVỀLỚP Cơ bản vềlớp CODE class Date{ int day; public: Date(int,int a=1); int month; void setDay(int); void output(); }; int main(){ Date d(6); d.month=3; d.setDate(25); d.output(); return 0; } Date::Date(int day,int month){ this->day=day; this->month=month; } void Date::setDay(int day){ this->day=day; } void Date::output(){ cout<<day<<"/"<<month; } Hàm khởi tạo Chúng ta có thể viết một hàm khởi tạo như thế này CODE class Student { string name;int age; public: Student(string name,int n):name(name),age(n) { } }; Nó tương đương với CODE class Student { string name;int age; public: Student(string name,int n) { (*this).name = name; this->age = n; } }; Hàm bạn (friend function) CODE class Student{ public: int id; friend bool equal(const Student&,const Student&); }; int main(){ Student s1;s1.id=2; Student s2;s2.id=3; cout<<equal(s1,s2); } bool equal(const Student& s1,const Student& s2){ return (s1.id==s2.id); } Overload toán tử (operator overload) Ví dụ dưới sẽ overload toán tử == CODE class Student{ public: int id; friend bool operator==(const Student&,const Student&); }; int main(){ Student s1;s1.id=2; Student s2;s2.id=3; cout<<((s1==s2)?"equal":"unequal"); } bool operator==(const Student& s1,const Student& s2){ return (s1.id==s2.id); } Overload toán tử nhập và xuất (input >> và output <<) Mọi người đều biết cin>>a là gọi toán tử nhập cin.operator>>(a) hoặc operator>>(cin,a) Overload 2 toán tử nhập và xuất này hết sức quan trọng về sau. Nhân tiện mỗi khi cấp phát bộ nhớ, dùng xong phải luôn hủy đi để thu hồi lại bộ nhớ đã cấp phát. Vì về sau game cái ưu tiên hàng đầu là bộ nhớ, đừng để lại rác. CODE class Date{ public: int day;int month; friend istream& operator>>(istream&,Date&); friend ostream& operator<<(ostream&,const Date&); }; istream& operator>>(istream& ins,Date& d){ ins>>d.day; ins>>d.month; ins.get(); //phải xóa bộ đệm return ins; } ostream& operator<<(ostream& outs,const Date& d){ outs<<d.day<<"/"<<d.month; return outs; } int main(){ Date d; cin>>d;cout<<d; Date *dt=new Date; //phải tạo object pointer, cấp phát bộ nhớ cin>>*dt;cout<<*dt; delete dt; //phải hủy object pointer } Hàm hủy (destructor) CODE class myclass{ public: int *p; myclass(); ~myclass(); }; int main(){ myclass m; return 0; } myclass::myclass(){ p=new int; //phải cấp phát bộ nhớ để tránh segmentation fault } myclass::~myclass(){ delete p; } Hàm khởi tạo sao chép (copy constructor CODE class Date{ public: int day;int month;char *special; Date(int,int,char*); Date(const Date&); ~Date(){ delete [] special; //bởi vì chúng ta cấp phát bộ nhớ cho nó } }; Date::Date(int day,int month,char *special){ this->day=day;this->month=month;this->special=special; } Date::Date(const Date& d){ this->day=d.day;this->month=d.month; this->special=new char[strlen(d.special)+1]; //cấp phát bộ nhớ cho nó strcpy(this->special,d.special); //phải dùng strcpy với char array } int main(){ Date d1(29,8,"birthday"); Date d2(d1); cout<<d2.special; return 0; } . 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 3: NH C LẠI VỀ LỚP C bản về lớp CODE class Date{ int day; public:. myclass::~myclass(){ delete p; } Hàm khởi tạo sao chép (copy constructor CODE class Date{ public: int day;int month;char *special; Date(int,int,char*); Date(const