Xem mẫu
- om
.c
Lập trình
ng
co
an
Chương 5: Dẫn xuất/thừa kế
và đa hình/đa xạ th
o ng
du
u
cu
2/10/2017
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Nội dung
5.1 Dẫn xuất/thừa kế
om
5.2 Hàm ảo và cơ chế đa hình/đa xạ
.c
5.3 Lớp thuần ảo
ng
5.4 Kiểm soát truy nhập
co
5.5 Tương thích kiểu
an
th
o ng
du
u
cu
Chương 5: Dẫn xuất/thừa kế và đa hình/đa xạ 2
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 5.1 Dẫn xuất và kế thừa
Nghiên cứu các thuộc tính và phương thức của các
loại xe đạp sau
om
.c
Xe đạp (Bicycle) Tandem bicycle
ng
co
an
th
o ng
du
u
cu
Chương 5: Dẫn xuất/thừa kế và đa hình/đa xạ 3
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Racing Bike Mountain Bike
om
.c
ng
co
an
th
o ng
du
u
cu
Chương 5: Dẫn xuất/thừa kế và đa hình/đa xạ 4
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 5.1 Dẫn xuất và kế thừa (…)
Tandem bicycle là một loại xe đạp
om
– Xe đạp có hai yên
.c
Mountain bicycle là một loại xe đạp
ng
– Xe đạp có khả năng chống sốc (lốp dầy và nhiều bắnh răng)
co
Racing bicyle là một loại xe đạp
an
– Xe đạp có cấu tạo khí động lực học nhẹ
th
Tandem, mountain, racing bicycle là những loại xe
ng
đạp chuyên dụng
o
du
– Có các thành phần cơ bản của một chiếc xe đạp
– Cùng nguyên lý hoạt động
u
cu
– Bổ sung thêm các thông tin khác
Chương 5: Dẫn xuất/thừa kế và đa hình/đa xạ 5
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 5.1 Dẫn xuất và kế thừa (…)
Cơ chế dẫn xuất/thừa kế là một kỹ thuật lập trình hướng đối
tượng cho phép chuyên biệt hóa
om
Dẫn xuất cho phép tạo ra một lớp mới (lớp dẫn xuất) của các đối
.c
tượng bằng cách sử dụng các lớp cũ như là các lớp cơ sở
ng
– Lớp dẫn xuất thừa hưởng các thuộc tính và hành vi của lớp “cha-
co
mẹ” (lớp cơ sở)
– Lớp dẫn xuất là một phiên bản chuyên biệt hóa của lớp “cha-mẹ”
an
th
ng Lớp cơ sở - ” lớp cha mẹ”
Bicycle
o
du
u
Mountain Racing Tandem
cu
Bikes Bikes Bikes
Lớp dẫn xuất
Chương 5: Dẫn xuất/thừa kế và đa hình/đa xạ 6
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Ví dụ minh họa sử dụng cơ chế dẫn xuất
Xây dựng các lớp biểu diễn về con người, sinh viên,
giảng viên
om
.c
Các thuộc tính và phép toán cơ bản của lớp Person
ng
co
Tên lớp
Person
an
name: string
age: int Thuộc tính
th
gender: string
ng
set_name
o
get_name
du
set_age Phép toán/
get_age
u
phương thức
cu
set_gender
get_gender
display
Chương 5: Dẫn xuất/thừa kế và đa hình/đa xạ 7
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Các thuộc tính và phép toán cơ bản của lớp Student và
Lecture
om
Student Lecture
.c
name: string name: string
ng
age: int age: int
gender: string gender: string
co
class: string faculty: string
an
id: int telnumber: int
set_name
th
set_name
get_name
ng get_name
set_age set_age
get_age
o
get_age
du
set_gender set_gender
get_gender get_gender
u
set_class set_faculty
cu
get_class get_faculty
set_id set_telnumber
get_id get_telnumber
display display
Chương 5: Dẫn xuất/thừa kế và đa hình/đa xạ 8
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 5.1 Dẫn xuất và kế thừa (…)
Ba lớp trên giống nhau về:
om
– Thuộc tính:
.c
Name
Age
ng
gender
co
– Phương thức
an
set_name, get_name
th
set_age, get_age ng
set_gender, get_gender
o
Khác nhau: lớp Student, Lecture có bổ sung thêm các
du
thuộc tính và phương thức
u
cu
Chương 5: Dẫn xuất/thừa kế và đa hình/đa xạ 9
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Person
Quan hệ lớp
name: string Lớp cơ sở
age: int
gender: string
set_name
om
get_name
.c
set_age
get_age
ng
set_gender
get_gender
co
display
Quan hệ dẫn xuất
an
Lớp dẫn xuất
th
ng
Student Lecture
o
du
class: string Faculty: string
ID: int Telnumber: int
u
cu
set_class set_faculty
get_class get_faculty
set_ID set_telnumber
get_ID get_telnumber
display display
Chương 5: Dẫn xuất/thừa kế và đa hình/đa xạ 10
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Thực hiện (Lớp Person)
//Khai báo lớp Person trong file person.h
om
#include
#include
.c
using namespace std;
ng
class Person{
string name;
co
int age;
an
string gender;
public:
Person(string,int,string);
th
ng
string get_name();
o
void set_name(string);
du
int get_age();
void set_age(int);
u
cu
string get_gender();
void set_gender(string);
void display()
};
Chương 5: Dẫn xuất/thừa kế và đa hình/đa xạ 11
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Thực hiện (Lớp Person)
//Định nghĩa lớp Person trong file person.cpp
#include “person.h”
Person::Person(string _name,int _age, string _gender){
om
name = _name;
age = _age;
.c
sex = _gender;
ng
}
string Person::get_name(){ return name;}
co
void Person::set_name(string _name){ name = _name;}
an
int Person::get_age(){ return age;}
void Person::set_age(int _age){ age = _age;}
th
string Person::get_gender(){ return gender;}
ng
void Person::set_gender(string _gender){gender = _gender;}
void Person::display(){
o
cout
- Thực hiện (Lớp Student)
//Khai báo lớp Student trong file student.h
class Student: public Person
om
{
.c
string lop;
int id;
ng
public:
co
Student(string, int, string,
string,int);
an
void set_class(string c);
th
string get_class(); ng
void set_id(int i);
int get_id();
o
du
void display();
};
u
cu
Chương 5: Dẫn xuất/thừa kế và đa hình/đa xạ 13
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Thực hiện (Lớp Student)
//Định nghĩa lớp Student trong file student.cpp
om
#include “student.h”
Student::Student(string _n,int _a, string _g, string
.c
_l,int _id)
ng
:Person(_n,_a,_g){
lop = _l;
co
id = _id;
an
}
th
void Student:: set_class(string c){lop = c;}
string Student:: get_class(){ return lop;}
ng
void Student:: set_id(int i){id = i;}
o
int Student:: get_id(){return id;}
du
void Student:: display(){
u
Person::display();
cu
cout
- Thực hiện (Lớp Lecture)
om
// Khai báo lớp Lecture trong file lecture.h
class Lecture:public Person{
.c
string faculty;
ng
int telnumber;
public:
co
Lecture(string,int, string, string,int);
an
void set_faculty(string f);
th
string get_faculty();
void set_telnumber(int tel);
ng
int get_telnumber();
o
void display();
du
};
u
cu
Chương 5: Dẫn xuất/thừa kế và đa hình/đa xạ 15
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Thực hiện (Lớp Lecture)
om
//Định nghĩa lớp Lecture trong file lecture.cpp
#include “lecture.h”
.c
Lecture::Lecture(string _n,int _a, string _g, string _f,int
_t)
ng
:Person(_n,_a,_g){
faculty = _f;
co
telnumber = _t;
an
}
void Lecture:: set_faculty(string f){faculty = f;}
th
string Lecture:: get_faculty(){ return faculty;}
ng
void Lecture:: set_telnumber(int tel){telnumber = tel;}
int Lecture:: get_telnumber(){return telnumber;}
o
void Lecture:: display(){
du
Person::display();
u
cout
- Chương trình minh họa sử dụng 1
//Thực hiện trong file main.cpp
#include
#include “person.h”
#include “student.h”
om
#include “lecture.h”
void main(){
.c
Person per("John",21,"man");
Student stu("Marry",22,"woman","Electronics1-K53",20080001);
ng
Lecture lec("Michel",22,"man","Electronics Engineering",123456789);
cout
- Chương trình minh họa sử dụng 2
//Thực hiện trong file main.cpp
void main(){
Person per("John",21,"man");
Student stu("Marry",22,"woman","Electronics1-K53",20080001);
om
Lecture lec("Michel",22,"man","Electronics Engineering",123456789);
per.display();
stu.display();
.c
lec.display();
}
ng
Kết quả chạy chương trình
co
an
th
o ng
du
u
cu
Chương 5: Dẫn xuất/thừa kế và đa hình/đa xạ 18
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Các dạng dẫn xuất/thừa kế
om
.c
ng
co
an
th
o ng
du
u
cu
Chương 5: Dẫn xuất/thừa kế và đa hình/đa xạ 19
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Tóm lược
Lớp dẫn xuất có hai mục đích cơ bản
om
– Mở rộng các tính năng của lớp cơ sở
.c
– Thừa hưởng các thuộc tính và phép toán của lớp cơ sở
– Cụ thể hóa các phép toán qua những phương thức khác nhau
ng
Ưu điểm của cơ chế thừa hưởng
co
– Xây dựng một mô hình phần mềm hướng đối tượng dễ hiểu
an
th
– Tiết kiệm được công việc thực hiện qua sử dụng lại các lớp cơ
sở
ng
– Hạn chế lỗi qua cơ chế thừa hưởng
o
du
u
cu
Chương 5: Dẫn xuất/thừa kế và đa hình/đa xạ 20
CuuDuongThanCong.com https://fb.com/tailieudientucntt
nguon tai.lieu . vn