PDA

View Full Version : [TUTOR] Tổng kết lập trình hướng đối tượng vớiC++ (part I)



wheremylove?
01-10-2002, 20:19
Tổng kết lập trình hướng đối tượng với C++.
I. Lớp và đối tượng.
Chắc các bạn đã quá quen thuộc với khái niệm lớp và đối tượng. Vì ở trong box này có một số bài viết rất hay. Vì vậy tôi sẽ không đề cập đến chúng nữa.
Để tạo một lớp, ta làm như sau:
class name{
private://có thể có hoặc không, nếu không có thì mặc định vẫn là private
//các thuộc tính (properties)
public:
//các phương thức (method) và cài đặt chúng
};
//cài đặt các phương thức chưa được cài đặt trong khai báo lớp

Để tạo một đối tượng thể hiện lớp, chúng ta làm như sau:
<tên lớp> <tên đối tượng>;

Ví dụ:
#include< iostream.h>
class TheMan{
private:
char* name;
double height;
double weight;
double age;
public:
void setTheMan(char* n,double h,double w,double a){
name=n;height=h; weight=w;age=a;
}
int DuTuoiLayVo(){
int du;
if (age>=20) du=1;
else du=0;
return du;
}
void display();
};
void TheMan::display(){
cout<<"Anh "<<name<<endl;
cout<<"Tuoi "<<age<<"\n";
cout<<"Chieu cao "<<height<<"cm\n";
cout<<"Can nang "<<weight<<"kg"<<endl;
if (DuTuoiLayVo()==1)
cout<<"Da du tuoi lay vo\n";
else
cout<<"Chua duoc lay vo dau nhe. Con tre con lam"<<endl;
}
void main(){
TheMan me;
me.setTheMan("WhereMyLove",1.67,53,23);
me.display();
}
Các từ khoá private, public xác định thuộc tính truy xuất dữ liệu của lớp. Với từ khoá private, bạn chỉ có thể truy xuất bên trong phạm vi lớp bởi các hàm thành phần (method). Ở đây các biến như age, height, weight, name chỉ được truy xuất bởi các hàm thành phần của lớp mà không thể truy xuất từ bên ngoài. Ví dụ nếu bạn tạo đối tượng me sau đó muốn cho age của me là 25, có thể bạn sẽ làm như sau:
me.age=25;
điều này sẽ gây lỗi vì age có thuộc tính truy xuất là private.
Có thể bạn sẽ tự hỏi là tại sao lại phải dùng private mà không dùng public luôn cho rồi. Bởi vì dữ liệu cần được bảo vệ để không bị thay đổi khi viết chương trình. Thường các property có thuộc tính truy xuất là private, còn các hàm thành phần có thuộc tính là public để mọi đối tượng cuả lớp có thể truy xuất.
Như chương trình trên ta có thể cài đặt các hàm thành phần ngay bên trong lớp, hoặc bên ngoài lớp, nếu cài đặt bên ngoài lớp thì bạn phải làm như sau:
<kiểu trả vể của hàm (void,int...)><tên lớp>::<tên hàm>(<các tham số>){
<khối lệnh>
}
II. Các hàm thành phần.
1. Chồng (overload) hàm thành phần.
Bạn có thể sử dụng cùng một tên hàm với số các tham số khác nhau, hoặc có kiểu dữ liệu khác nhau. Ví dụ với ví dụ trên bạn có thể làm như sau:
class TheMan{
char* name;
double age;
double height;
double weight;
public:
void setTheMan(char* n) {
name=n;
}
void setTheMan(char* n,double age) {
name=n;
age=a;
}
...
}:
Sau đó bạn tạo một đối tượng
TheMan me;
TheMan my_enermy;
Và có thể cài đặt dữ liệu cho các đối tượng này như sau:
me.setTheMan("Where My Love");
my_enermy.setTheMan("Hung",23);
2. Hàm thành phần với các tham số ngầm định.
Một cách khác cho kết quả giống như sự chồng hàm đó là xây dựng hàm với các tham số ngầm định. Chúng ta làm như sau:
void setTheMan(char* name,double age,double height=1.65,double weight=55);
hay:
void setTheMan(char* name="My Love",double age=23,double height=1.65,double weight=55);
Chú ý là các tham số có giá trị ngầm định phải đặt ở cuối danh sách tham số. Bạn không thể làm như sau:
void setTheMan(char* name="Secret", double age,double height,double weight);
...
Ví dụ về sự chồng hàm và hàm với tham số ngầm định:
#include<iostream.h>
class TheWoMan{
char* name;
double age;
double height;
double weight;
public:
void setTheWoMan(char* n,double a=15,double h=1.60,double w=47);
void grow(double);//tăng tuổi (ứ thích nếu đã trên 30)
void grow(double,double);//tăng tuổi, chiều cao
void grow(double,double,double);//tăng tuổi, chiều cao, giảm cân (bằng cách nào nhỉ?)
void display();
};
void TheWoMan::setTheWoMan(char* n,double a,double h,double w) {
name=n;
age=a;
height=h;
weight=w;
}
void TheWoMan::grow(double a) {
age+=a;
}
void TheWoMan::grow(double a,double h) {
age+=a;
height+=h;
}
void TheWoMan::grow(double a,double h,double w) {
age+=a;
height+=h;
weight-=w;
}
void TheWoMan::display(){
cout<<"Co "<<name<<endl;
cout<<"Tuoi "<<age<<endl;//không lịch sự lắm khi xem tuổi woman
cout<<"Cao "<<height<<"cm\n";
cout<<"Nang "<<weight<<"cm\n";
if(age>=18)
cout<<"Em da du tuoi lay chong roi.\n";
else
cout<<"Em con be lam may anh oi!\n";
}
void main(){
TheWoMan she;
she.setTheWoMan("Nguyen Thi Mong Mo");//3 tham số ngầm định là age=15, height=1.60, weight=47
she.grow(1);//một năm sau, mọi thứ không thay đổi trừ tuổi.
she.display();
TheWoMan other;
other.setTheWoMan("Britney Spears",20,1.67,49);// đầy đủ
other.grow(2,0,3);//hai năm sau, không cao thêm nhưng giảm cân rồi, thích quá
other.display();
}

danceswithwolves
02-10-2002, 08:04
nếu có thể, bạn hãy dùng tag [ code ] stuffs here [ /code ] để những bạn khác đọc code dễ dàng hơn. Chú ý là không có khoảng trống giữa dấu ngoặc vuông và code.

Chào đoàn kết và quyết thắng (hehe câu này học được từ tài liệu Cách Mạng đó :)).

tytynguyen
11-01-2009, 20:58
cac bac chi dum lam do an duoc ko?cazch truy xuat file ,lien ket lop? minhc am on nhieu

one_for_all
16-01-2009, 09:59
bác nào có bài tập hdt thì up lên cho anh em nhờ,càng nhiều càng tốt hen.