Bài giảng môn Lập trình - Chương 5: Dẫn xuất/thừa kế và đa hình/đa xạ
Lập trình
Chương 5: Dẫn xuất/thừa kế
và đa hình/đa xạ
2/10/2017
Nội dung
. 5.1 Dẫn xuất/thừa kế
. 5.2 Hàm ảo và cơ chế đa hình/đa xạ
. 5.3 Lớp thuần ảo
. 5.4 Kiểm soát truy nhập
. 5.5 Tương thích kiểu
2
Chương 5: Dẫn xuất/thừa kế và đa hình/đa xạ
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
. Xe đạp (Bicycle)
. Tandem bicycle
3
Chương 5: Dẫn xuất/thừa kế và đa hình/đa xạ
. Racing Bike
. Mountain Bike
4
Chương 5: Dẫn xuất/thừa kế và đa hình/đa xạ
5.1 Dẫn xuất và kế thừa (…)
. Tandem bicycle là một loại xe đạp
– Xe đạp có hai yên
. Mountain bicycle là một loại xe đạp
– Xe đạp có khả năng chống sốc (lốp dầy và nhiều bắnh răng)
. Racing bicyle là một loại xe đạp
– Xe đạp có cấu tạo khí động lực học nhẹ
. Tandem, mountain, racing bicycle là những loại xe
đạp chuyên dụng
– 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
– Bổ sung thêm các thông tin khác
5
Chương 5: Dẫn xuất/thừa kế và đa hình/đa xạ
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
. 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
tượng bằng cách sử dụng các lớp cũ như là các lớp cơ sở
– 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-
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ẹ”
Lớp cơ sở - ” lớp cha mẹ”
Bicycle
Mountain
Bikes
Racing
Bikes
Tandem
Bikes
Lớp dẫn xuất
6
Chương 5: Dẫn xuất/thừa kế và đa hình/đa xạ
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
. Các thuộc tính và phép toán cơ bản của lớp Person
Tên lớp
Person
name: string
Thuộc tính
age: int
gender: string
set_name
get_name
set_age
Phép toán/
phương thức
get_age
set_gender
get_gender
display
7
Chương 5: Dẫn xuất/thừa kế và đa hình/đa xạ
. Các thuộc tính và phép toán cơ bản của lớp Student và
Lecture
Lecture
Student
name: string
age: int
gender: string
faculty: string
telnumber: int
name: string
age: int
gender: string
class: string
id: int
set_name
get_name
set_age
set_name
get_name
set_age
get_age
get_age
set_gender
get_gender
set_faculty
get_faculty
set_telnumber
get_telnumber
display
set_gender
get_gender
set_class
get_class
set_id
get_id
display
8
Chương 5: Dẫn xuất/thừa kế và đa hình/đa xạ
5.1 Dẫn xuất và kế thừa (…)
. Ba lớp trên giống nhau về:
– Thuộc tính:
Name
Age
gender
– Phương thức
set_name, get_name
set_age, get_age
set_gender, get_gender
. Khác nhau: lớp Student, Lecture có bổ sung thêm các
thuộc tính và phương thức
9
Chương 5: Dẫn xuất/thừa kế và đa hình/đa xạ
Person
. Quan hệ lớp
name: string
age: int
gender: string
Lớp cơ sở
set_name
get_name
set_age
get_age
set_gender
get_gender
display
Quan hệ dẫn xuất
Lớp dẫn xuất
Lecture
Student
Faculty: string
Telnumber: int
class: string
ID: int
set_class
get_class
set_ID
set_faculty
get_faculty
set_telnumber
get_telnumber
display
get_ID
display
10
Chương 5: Dẫn xuất/thừa kế và đa hình/đa xạ
Thực hiện (Lớp Person)
//Khai báo lớp Person trong file person.h
#include <iostream>
#include <string>
using namespace std;
class Person{
string name;
int age;
string gender;
public:
Person(string,int,string);
string get_name();
void set_name(string);
int get_age();
void set_age(int);
string get_gender();
void set_gender(string);
void display()
};
11
Chương 5: Dẫn xuất/thừa kế và đa hình/đa xạ
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){
name = _name;
age = _age;
sex = _gender;
}
string Person::get_name(){ return name;}
void Person::set_name(string _name){ name = _name;}
int Person::get_age(){ return age;}
void Person::set_age(int _age){ age = _age;}
string Person::get_gender(){ return gender;}
void Person::set_gender(string _gender){gender = _gender;}
void Person::display(){
cout<<“Person:\n”;
cout<<“Name:\t”<<name<< endl;
cout<<“Age:\t”<<age<< endl;
cout<<“Gender:\t”<<gender<< endl;
}
12
Chương 5: Dẫn xuất/thừa kế và đa hình/đa xạ
Thực hiện (Lớp Student)
//Khai báo lớp Student trong file student.h
class Student: public Person
{
string lop;
int id;
public:
Student(string, int, string,
string,int);
void set_class(string c);
string get_class();
void set_id(int i);
int get_id();
void display();
};
13
Chương 5: Dẫn xuất/thừa kế và đa hình/đa xạ
Thực hiện (Lớp Student)
//Định nghĩa lớp Student trong file student.cpp
#include “student.h”
Student::Student(string _n,int _a, string _g, string
_l,int _id)
:Person(_n,_a,_g){
lop = _l;
id = _id;
}
void Student:: set_class(string c){lop = c;}
string Student:: get_class(){ return lop;}
void Student:: set_id(int i){id = i;}
int Student:: get_id(){return id;}
void Student:: display(){
Person::display();
cout<<"class:\t"<<lop<<endl;
cout<<"ID:\t"<<id<<endl;
}
14
Chương 5: Dẫn xuất/thừa kế và đa hình/đa xạ
Thực hiện (Lớp Lecture)
// Khai báo lớp Lecture trong file lecture.h
class Lecture:public Person{
string faculty;
int telnumber;
public:
Lecture(string,int, string, string,int);
void set_faculty(string f);
string get_faculty();
void set_telnumber(int tel);
int get_telnumber();
void display();
};
15
Chương 5: Dẫn xuất/thừa kế và đa hình/đa xạ
Thực hiện (Lớp Lecture)
//Định nghĩa lớp Lecture trong file lecture.cpp
#include “lecture.h”
Lecture::Lecture(string _n,int _a, string _g, string _f,int
_t)
:Person(_n,_a,_g){
faculty = _f;
telnumber = _t;
}
void Lecture:: set_faculty(string f){faculty = f;}
string Lecture:: get_faculty(){ return faculty;}
void Lecture:: set_telnumber(int tel){telnumber = tel;}
int Lecture:: get_telnumber(){return telnumber;}
void Lecture:: display(){
Person::display();
cout<<"Faculty:\t"<<faculty<<endl;
cout<<"Telephone Number:\t"<<telnumber<<endl;
}
16
Chương 5: Dẫn xuất/thừa kế và đa hình/đa xạ
. Chương trình minh họa sử dụng 1
//Thực hiện trong file main.cpp
#include <iostream>
#include “person.h”
#include “student.h”
#include “lecture.h”
void main(){
Person per("John",21,"man");
Student stu("Marry",22,"woman","Electronics1-K53",20080001);
Lecture lec("Michel",22,"man","Electronics Engineering",123456789);
cout<<“Person:\t”<<per.get_name()<<“\t”<<per.get_age()
<<“\t”<<per.get_gender()<<“\n\n”;
cout<<“Student:\t”<<stu.get_name()<<“\t”<<stu.get_age()<<“\t”
<<stu.get_gender()<<“\t”<<stu.get_class()<<“\t”<<stu.get_id()<<“\n\n”;
cout<<“Lecture:\t”<<lec.get_name()<<“\t”<<lec.get_age()<<“\t”
<<lec.get_gender() <<“\t”<<lec.get_faculty()<<“\t”
<<lec.get_telnumber()<<“\n\n”;
}
. Kết quả chạy chương trình
17
. 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);
Lecture lec("Michel",22,"man","Electronics Engineering",123456789);
per.display();
stu.display();
lec.display();
}
. Kết quả chạy chương trình
18
Chương 5: Dẫn xuất/thừa kế và đa hình/đa xạ
Các dạng dẫn xuất/thừa kế
19
Chương 5: Dẫn xuất/thừa kế và đa hình/đa xạ
Tóm lược
. Lớp dẫn xuất có hai mục đích cơ bản
– Mở rộng các tính năng của lớp cơ sở
– 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
. Ưu điểm của cơ chế thừa hưởng
– Xây dựng một mô hình phần mềm hướng đối tượng dễ hiểu
– 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ở
– Hạn chế lỗi qua cơ chế thừa hưởng
20
Chương 5: Dẫn xuất/thừa kế và đa hình/đa xạ
Tải về để xem bản đầy đủ
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng môn Lập trình - Chương 5: Dẫn xuất/thừa kế và đa hình/đa xạ", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
File đính kèm:
bai_giang_mon_lap_trinh_chuong_5_dan_xuatthua_ke_va_da_hinhd.pdf

